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

codeday· 2019-11-17
本文来自 codeday ,作者 codeday
-(BOOL)shouldAutorotate {

    return NO;

}

上面的方法适用于一个控制器,但是当有多个viewController推入堆栈时.

我想要一个仅在纵向模式下显示的特定控制器.

- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {

}

我已经针对iOS 8的堆栈溢出使用了上面建议的方法,但未给出期望的结果.

最佳答案
首先,使用-supportedInterfaceOrientations而不是-shouldAutorotate.仅在必须基于运行时确定的因素禁止自动旋转时,才应使用-shouldAutorotate.您知道您的视图控制器将始终仅支持纵向模式,此处没有运行时决定.

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

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

一个重要的警告:推到导航堆栈上的视图控制器无法控制其初始界面方向.这将始终是当前界面的方向.以上技术将要执行的操作是防止在显示该视图控制器时将界面旋转到除纵向以外的任何方向.