我的应用从 iOS 6 到 iOS 7 标签问题

Posted

技术标签:

【中文标题】我的应用从 iOS 6 到 iOS 7 标签问题【英文标题】:My app from iOS6 to iOS7 Label issue 【发布时间】:2014-01-18 13:35:20 【问题描述】:

我想将 ios6 应用程序更改为 iOS7。(即)我想要 iOS7 兼容性。当我在 iOS7 模拟器中运行我的应用程序时,视图正在向上移动。 有人可以帮我吗?

【问题讨论】:

你了解 iOS 7 的变化了吗? 哪个视图向上移动?请给我们更多信息 我的游戏设计在 iPhone 5s 和 iPad 上似乎不太好。我该如何解决?我的一些标签未对齐。 在 iPad 中,一些标签被剪掉了。而在 iPhone 5 屏幕上,完美显示 【参考方案1】:

iPhone 屏幕的全尺寸(非视网膜,为简单起见,因为我们使用的是布局坐标)为 320x480。

在 iOS6 和之前的版本中,从开发人员的角度来看,屏幕尺寸实际上是 320x460,顶部有一个 320x20 的条带用于状态栏。在 iOS6 中,点 x=0,y=0 转换为 iOS7 的点 x=0,y=20。

这是因为现在状态栏是透明的,您可以控制顶部 320x20 条的外观。

如果你想同时支持两者,你需要检查他们使用的是哪个版本的 iOS,如果他们使用的是 iOS7 或更高版本,你需要在几乎所有地方都将 origin.y 增加 20。


借用from this *** answer,这里是如何以编程方式确定正在运行的iOS版本:

NSString *version = [[UIDevice currentDevice] systemVersion];
int ver = [version intValue];
if (ver < 7) 
    //iOS 6 work
 else 
    //iOS 7 related work

【讨论】:

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) *_Prefix.pch 里面的这个宏可以在那里派上用场 你说得有道理,但它仍然不能解决我的问题。因为。如果iphone 4和5都是ios7怎么办。他们的按钮仍然不同。在我的 4 上,它是干净的,但在 5 上它错位了。 您也可以应用相同的逻辑来区分不同的屏幕尺寸。这确实解决了你的问题。您的问题是关于 iOS 6 和 iOS 7 之间的差异,而不是关于 iPhone 4 和 iPhone 5 之间的差异。无论屏幕大小如何,iOS6 和 iOS7 的 Y 差异应该是 20 像素。如果你已经完成了,那么任何对齐问题都与不同的屏幕尺寸有关,而不是不同的 iOS 版本。您的问题是关于 iOS 版本的。【参考方案2】:

因为默认情况下 viewcontroller 有扩展的边缘,它会在顶栏下方,将其设置为 UIedgeRectNone 然后视图将不会在顶栏下方。

self.edgesForExtendedLayout = UIRectEdgeNone;

【讨论】:

【参考方案3】:

轻松支持 iOS6 和 iOS7 的最佳方法是将所有视图控制器打包到导航控制器中(必要时将导航栏设置为隐藏)。 这将允许自动和干净地处理状态栏行为更改。

【讨论】:

【参考方案4】:

人们正在寻找正确的答案,但没有给出。我为此苦苦挣扎了几个星期,终于想出了如何正确处理它。

如何处理 iOS 6 和 iOS 7 之间的布局差异,以便无需自定义代码即可支持两者:

答案会有所不同,具体取决于您使用的是自动布局还是支柱和弹簧。

对于自动布局,您将顶部约束绑定到“顶部布局指南”,这是一条从窗口内容区域开始的假想线。它位于任何存在的状态栏或导航栏下方,如果其中一项或两项未显示,则向上移动。

对于基于 struts 和字符串的布局,IB 有一种机制可以让您自动调整视图布局。

选择您的 nib 文件/故事板文件。

打开右侧的“文件检查器”并查找标题为“查看为”的项目。将其设置为“iOS 6.1 和更早版本。这会做几件事。它使您的 UI 看起来像是在 iOS 6 下运行的应用程序,并且它使几何图形像在 iOS 6.1 规则下运行一样工作(内容视图的 0.0 点)位于状态栏下方,当显示状态栏时,您的有效屏幕尺寸会小 20 点。)

接下来,选择固定在屏幕顶部的视图,然后选择 Size Inspector。 (实用程序区域中的选项卡看起来像一个标尺)。尺寸检查器有一个新部分,称为“iOS 6/7 deltas”。这使您可以指定在“其他”版本的 iOS 中运行时应用到所选视图的更改,而不是您在上面在文件检查器中指定的版本。由于我们指定了 iOS 6,因此当前布局使用的是 iOS 6 规则,因此我们希望指定运行 iOS 7 时所需的更改。如果我们在文件检查器中指定“查看为 iOS 7”,我们将看到 iOS 7 布局,并且我们将指定在 iOS 6 下运行时要进行的更改。您可以这样做。但是,请注意。如果您有 delta 值(如下所述)然后切换此设置,IB 会以非常混乱和破坏性的方式在您身上移动东西。不要那样做。为“查看方式”设置选择一个值并在整个应用程序中坚持使用它,否则您会感到非常困惑和沮丧。

您想让导航栏高 20 磅(然后它们会自动为状态栏着色并调整其布局,使其标题和栏按钮项不会与状态栏重叠。)

您通常还希望将固定在屏幕顶部的视图设置为 20 点的 delta Y,以将其向下移动以为状态栏腾出空间。

如果视图也固定在屏幕底部,以便其大小适应屏幕大小,您可能还需要 -20 像素的增量高度。

需要进行一些修改才能使一切正常运行,但是通过正确设置“iOS 6/7 delta”值,您可以创建在两个操作系统版本上都能正常运行的 IB 文件,而无需任何自定义代码。

如果您确实有自定义代码来执行诸如调整布局以适应用户界面方向的事情,那么事情就会变得非常混乱。

【讨论】:

以上是关于我的应用从 iOS 6 到 iOS 7 标签问题的主要内容,如果未能解决你的问题,请参考以下文章

ios从iOS 6升级到iOS 7 [关闭]

iOS 7 - TabBarController 没有文本标签

从 iOS 6 更新到 iOS 7 时 identifierForVendor 会发生变化

iOS 6 应用程序在 iOS 7 风格上运行

iOS 6 + 7 中的 iOS 隐藏状态栏和标签栏

在 iOS 7 下运行我的 iOS 6 应用程序时,为啥我的视图上没有正确显示阴影?