我有一个iPhone应用程序,它使用UINavigationController来呈现一个向下钻取的界面:第一个视图,然后是另一个视图,深达四层。 我希望将前三个视图限制为纵向,只允许最后一个视图旋转到横向。 当从第四个视图返回到第三个视图,并且第四个视图处于横向时,我希望所有的东西都旋转回肖像。 在iOS 5中,我简单地定义了shouldAutorotateToInterfaceOrientation:在我的每个视图控制器中为允许的方向返回YES。 一切工作如上所述,包括即使从视图控制器#4到#3返回时横向保持设备也返回肖像。 在iOS 6中,所有的视图控制器旋转到横向,打破那些不意味着。 iOS 6发行说明说 更多的责任是转移到应用程序和应用程序委托。 现在,iOS容器(如UINavigationController )不会咨询他们的孩子,以确定他们是否应该自动旋转。 […]系统每当设备旋转时或每当视图控制器呈现全屏模式演示风格时,都会询问其支持的接口方向的最顶级全屏视图控制器(通常是根视图控制器)。 此外,只有当这个视图控制器从其shouldAutorotate方法返回YES时,才会检索支持的方向。 […]系统通过将应用程序的supportedInterfaceOrientationsForWindow:方法返回的值与最顶级的全屏控制器的supportedInterfaceOrientations方法返回的值相交来确定是否支持方向。 所以我subclassed UINavigationController ,给了我的MainNavigationController布尔属性landscapeOK并用它来返回在supportedInterfaceOrientations允许的方向。 然后在我的每个视图控制器的viewWillAppear:方法,我有这样的一行 [(MainNavigationController*)[self navigationController] setLandscapeOK:YES]; 告诉我的MainNavigationController所需的行为。 问题来了:如果我现在在纵向模式下导航到我的第四个视图,并翻转手机,它会旋转到横向。 现在我按下后退button返回到我的第三个视图,这应该只是工作肖像。 但是它不会回转。 我该如何做到这一点? 我试过了 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait] 在我的第三个视图控制器的viewWillAppear方法,但它什么都不做。 这是错误的方法来调用,或者错误的地方来调用它,或者我应该以完全不同的方式来实现整个事情吗?