2

我已经阅读了几乎所有关于新 iOS6 自动旋转内容的答案,但我仍然无法做我想做的事。

我有一个标签栏。其中一个选项卡是 NavigationView。当您将 iPhone 转为横向时,会加载一个 modalViewController。

在 iOS5 上一切正常,但我无法在 iOS6 上旋转模式视图。我已经尝试子类化导航控制器,子类化标签栏控制器和两者!。没门。

我现在很困惑。哪个负责旋转模态视图?tabbarController?、navigationViewController?、呈现它的 viewController?。

我会很感激任何帮助。

谢谢

4

2 回答 2

2

在 iOS6 中,您必须更改应用程序的旋转。application.statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

于 2012-11-17T21:05:41.513 回答
0

iOS 6 中的自动旋转正在发生变化。 在 iOS 6 中,不推荐使用UIViewController的shouldAutorotateToInterfaceOrientation :方法。取而代之的是,您应该使用supportedInterfaceOrientationsForWindowshouldAutorotate方法。

更多的责任正在转移到应用程序和应用程序委托身上。现在,iOS 容器(例如UINavigationController)不会咨询它们的子容器来确定它们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向设置为 iPad 惯用语的UIInterfaceOrientationMaskAll和 iPhone 惯用语的UIInterfaceOrientationMaskAllButUpsideDown

视图控制器支持的界面方向会随着时间而改变——甚至应用程序支持的界面方向也会随着时间而改变。每当设备旋转或视图控制器以全屏模式呈现样式呈现时,系统都会向最顶层的全屏视图控制器(通常是根视图控制器)询问其支持的界面方向。此外,仅当此视图控制器YES从其shouldAutorotate 方法返回时,才会检索支持的方向。系统将视图控制器支持的方向与应用支持的方向(由Info.plist文件或应用委托的application:supportedInterfaceOrientationsForWindow:方法确定)相交以确定是否旋转。

系统通过将应用程序的supportedInterfaceOrientationsForWindow:方法返回的值与最顶部全屏控制器的supportedInterfaceOrientations方法返回的值相交来确定是否支持方向。

setStatusBarOrientation :animated:方法并未完全弃用。它现在仅在最顶层全屏视图控制器的supportedInterfaceOrientations0方法返回时才有效。这使得调用者负责确保状态栏方向一致。

为了兼容性,仍然实现shouldAutorotateToInterfaceOrientation:方法的视图控制器不会获得新的自动旋转行为。(换句话说,他们不会回退到使用应用程序、应用程序委托或Info.plist文件来确定支持的方向。)相反,shouldAutorotateToInterfaceOrientation: 方法用于合成将由supportedInterfaceOrientations方法返回的信息。

willRotateToInterfaceOrientation :duration:willAnimateRotationToInterfaceOrientation:duration:didRotateFromInterfaceOrientation:方法不再在任何对其自身进行全屏演示的视图控制器上调用 - 例如,presentViewController:animated:completion:

您应该确保您的应用程序没有使用这些方法来管理任何子视图的布局。相反,他们应该使用视图控制器的viewWillLayoutSubviews方法并使用视图的边界矩形调整布局。

参考 - iOS 6.0 发行说明

希望这可以帮助你

于 2012-11-17T14:56:11.337 回答