我有一个iPhone应用程序使用a UINavigationController来呈现向下钻取界面:第一个视图,然后是另一个视图,最多四个级别。我希望前三个视图仅限于纵向,只允许最后一个视图旋转到横向。当从第四个视图返回到第三个视图并且第四个视图处于横向时,我希望所有内容都旋转回肖像。
在iOS 5中,我只是shouldAutorotateToInterfaceOrientation:在每个视图控制器中定义为允许的方向返回YES。一切都如上所述起作用,包括当从视图控制器#4返回到#3时,即使设备以横向方向保持,也返回到纵向。
在iOS 6中,所有视图控制器都旋转到横向,打破那些不适合的视图。iOS 6发行说明说
更多的责任转移到应用程序和应用程序代表。现在,iOS容器(例如UINavigationController)不会咨询他们的孩子以确定他们是否应该自动旋转。[...]无论何时设备旋转或者每当视图控制器呈现全屏模态演示样式时,系统都会询问最顶层的全屏视图控制器(通常是根视图控制器)的支持接口方向。此外,仅当此视图控制器从其shouldAutorotate方法返回YES时,才会检索支持的方向。[...]系统通过将应用程序supportedInterfaceOrientationsForWindow:方法返回的值supportedInterfaceOrientations与最顶层全屏控制器的方法返回的值相交来确定是否支持方向。
所以我继承了UINavigationController,给了我MainNavigationController一个布尔属性landscapeOK并用它来返回允许的方向supportedInterfaceOrientations。然后在我的每个视图控制器的viewWillAppear:方法中,我都有这样的一行
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
告诉我MainNavigationController想要的行为。
问题就出现了:如果我现在以纵向模式导航到我的第四个视图并将手机翻过来旋转到横向。现在我按下后退按钮返回我的第三个视图,该视图应该仅适用于肖像。但它不会回转。我怎么做到这一点?
我试过了
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
在viewWillAppear我的第三个视图控制器的方法,但它没有做任何事情。这是错误的调用方法,也可能是错误的调用方法,或者我应该以完全不同的方式实现整个事情?
慕勒3428872
慕丝7291255
相关分类