为什么自动旋转发生在iOS 6而不是iOS 5?

时间:2013-07-02 23:34:27

标签: ios ios-simulator autolayout

我对模拟器中的iOS 6和AutoLayout提出了一般性问题。 我的应用也面向iOS 5和iOS 6。我需要在StoryBoard中关闭AutoLayout,否则应用程序会在iOS 5模拟器中崩溃(因为iOS6首先支持AutoLayout)。 但是当我启动iOS 6模拟器时,所有视图都在旋转,所有子视图都相应地调整大小。使用iOS 5模拟器时,所有视图都不会随着设备方向的改变而旋转。

这会在真实设备上发生吗?因此,即使在故事板中关闭了AutoLayout选项,所有视图都会在设备方向上与iOS 6一起旋转,在真实设备上更好吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

Apple改变了iOS 6中自动旋转的工作方式。

如果您在Xcode 4.6中创建项目,Xcode会将其设置为使用iOS 6自动旋转API。项目模板允许纵向,横向左和横向右方向(以及iPad应用中的倒置肖像)。因此,当您在iOS 6(设备或模拟器)上运行应用程序时,该应用程序允许界面旋转。

当您在iOS 5上运行该项目时(在模拟器或设备上),系统会忽略iOS 6自动旋转API并在视图控制器上查找shouldAutorotateToInterfaceOrientation:方法。由于Xcode 4.6没有创建该方法(并且可能您没有添加它),因此系统使用默认实现,该实现仅返回YES以进行纵向方向。因此,在iOS 5上,您无法进行任何界面轮换。

如果您不想要界面旋转,那么简单的解决方案就是转到目标的摘要并关闭横向方向。

target summary with landscape buttons called out

您可以从以下几个官方消息来源了解更多信息:

答案 1 :(得分:2)

就像@Patrick Tescher所说,你不能在iOS 5中使用自动布局。

截至2013年6月,您还应该考虑到只有6%的用户拥有iOS 5。与此同时,iOS 6的采用率为93%(source)。这是一个非常高的数字。因此,根据您的情况,您可能不必首先使您的应用iOS 5兼容。将功能开发时间花费两倍以使其适用于6%的用户可能不是一次性的最佳使用。除非这是商业决定,否则你在任何一种情况下都会得到报酬:)

答案 2 :(得分:0)

如果您想支持iOS 5,则不应使用自动布局。仅在iOS 6及更高版本中支持自动布局。

从技术上讲,你可以拥有两个故事板并为iOS 5加载一个故事板,为iOS 6加载一个,但是你会复制很多工作。最好只是停止自动布局,直到您可以删除iOS 5支持。