从iOS 6 发行说明:
iOS 6 中的自动旋转正在发生变化。在 iOS 6 中,不推荐使用的shouldAutorotateToInterfaceOrientation:
方法。UIViewController
取而代之的是,您应该使用supportedInterfaceOrientationsForWindow:
andshouldAutorotate
方法。
更多的责任正在转移到应用程序和应用程序委托身上。现在,iOS 容器(例如UINavigationController
)不会咨询它们的子容器来确定它们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向设置UIInterfaceOrientationMaskAll
为 iPad 惯用语和UIInterfaceOrientationMaskAllButUpsideDown
iPhone 惯用语。
视图控制器支持的界面方向会随着时间而改变——甚至应用程序支持的界面方向也会随着时间而改变。每当设备旋转或视图控制器以全屏模式呈现样式呈现时,系统都会向最顶层的全屏视图控制器(通常是根视图控制器)询问其支持的界面方向。此外,仅当此视图控制器从其shouldAutorotate
方法返回 YES 时才会检索支持的方向。系统将视图控制器支持的方向与应用支持的方向(由 Info.plist 文件或应用代理的application:supportedInterfaceOrientationsForWindow:
方法确定)相交以确定是否旋转。
supportedInterfaceOrientationsForWindow:
系统通过将应用程序的方法返回的值与supportedInterfaceOrientations
最顶层全屏控制器的方法返回的值相交来确定是否支持方向。
该setStatusBarOrientation:animated:
方法并未完全弃用。它现在只有在supportedInterfaceOrientations
最顶层的全屏视图控制器的方法返回 0 时才有效。这使得调用者负责确保状态栏方向一致。
我知道这很拗口,但您可能还想在项目设置中检查支持的界面方向表: