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

时间:2014-10-30 05:19:07

标签: ios objective-c ios8 uiinterfaceorientation

-(BOOL)shouldAutorotate {

    return NO;

}

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

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

}

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

1 个答案:

答案 0 :(得分:8)

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

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

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

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