如何在iOS 8中为特定控制器禁用自动旋转?

-(BOOL)shouldAutorotate { return NO; } 

上面的方法适用于一个控制器,但是当堆栈上有多个viewControllers时。
我想要一个应该只在纵向模式下显示的特定控制器。

 - (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { } 

我已经在iOS 8的堆栈溢出上使用了上面提到的方法,但它没有给出期望的结果。

首先,使用-supportedInterfaceOrientations而不是-shouldAutorotate-shouldAutorotate只应在必须根据运行时确定的因素禁止自转时使用。 您知道您的视图控制器将始终仅支持纵向模式,此处没有运行时决策。

接下来,导航控制器的委托必须实现-navigationControllerSupportedInterfaceOrientations:方法,以在导航堆栈顶部的视图控制器上返回调用-supportedInterfaceOrientations的结果。

 -(NSUInteger)navigationControllerSupportedInterfaceOrientations:(UINavigationController *)navigationController { return navigationController.topViewController.supportedInterfaceOrientations; } 

一个重要的警告:推入导航堆栈的视图控制器无法控制其初始界面方向; 这将永远是当前的界面方向。 上述技术将做的是在显示视图控制器时防止界面旋转到除肖像之外的任何方向。