【问题标题】:iOS6 autorotation. TabBar->Navigation->ModaliOS6 自动旋转。 TabBar->导航->模态
【发布时间】:2012-11-18 05:05:41
【问题描述】:

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

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

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

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

我将不胜感激。

谢谢

【问题讨论】:

  • [self presentModalViewController:newController animated:YES];在 iOS6 中已弃用,请尝试 [self presentViewController:newController animated:YES completion:nil];
  • 我期待看到这个答案。我也遇到了同样的问题。

标签: iphone rotation ios6


【解决方案1】:

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

【讨论】:

  • 它有效!我知道这只是一种解决方法,但它可以节省我的时间。谢谢你。 :D
【解决方案2】:

iOS 6 中的自动旋转正在发生变化。 在 iOS 6 中,UIViewControllershouldAutorotateToInterfaceOrientation: 方法已被弃用。取而代之的是,您应该使用 supportedInterfaceOrientationsForWindowshouldAutorotate 方法。

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

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

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

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

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

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

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

参考 - iOS 6.0 Release Notes

希望对你有帮助

【讨论】:

  • 对不起,我应该写我已经知道了。我在目标摘要中支持所有方向。我将navigationController 和tabBarController 子类化,允许方向和设置shouldAutorotate 为YES。呈现模态的视图和呈现自身的视图也是如此。仍然,没有旋转。我错过了什么?
  • 请看我的回答第 5 段
  • 你说得对,巴拉。对不起,我错过了。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多