即使我阻止横向旋转,屏幕也在旋转

Posted

技术标签:

【中文标题】即使我阻止横向旋转,屏幕也在旋转【英文标题】:Screen is rotating even if I block the landscape rotation 【发布时间】:2014-12-04 10:03:47 【问题描述】:

我想阻止某些UIViewController 的横向显示。我阅读了很多不同的东西来管理它,但我没有找到一个运作良好的解决方案。每次,即使应该阻止方向也不会被阻止。

我有以下代码来阻止UIViewController 中没有横向旋转的横向方向:

- (BOOL)shouldAutorotate 
    return NO;


- (NSUInteger)supportedInterfaceOrientations 
    return UIInterfaceOrientationMaskPortrait;


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
    return UIInterfaceOrientationPortrait;

即便如此,视图还是横向旋转。

我错过了什么吗?

【问题讨论】:

您需要使用自定义导航控制器,您可以在其中阻止方向。 【参考方案1】:

您的UIViewController 是否包含在UINavigationController 中?还是TabBarController?在这种情况下,UIViewController 只是将该调用传递给UINavigationController,您将必须继承UINavigationController 并在那里实现这些方法并检查导航控制器堆栈中的哪个视图控制器是要旋转的视图控制器并且只允许轮换你想要的那个。

这就是我在一个项目中的做法:

- (NSUInteger)supportedInterfaceOrientations

    if ([self.visibleViewController class] == [MyViewController class]) 
        return UIInterfaceOrientationMaskAllButUpsideDown;
     else 
        return UIInterfaceOrientationMaskPortrait;
    

您也可以尝试从导航控制器询问有问题的 UIViewController,但由于某种原因这对我来说效果不佳。

- (NSUInteger)supportedInterfaceOrientations

    return [[self.viewControllers lastObject] supportedInterfaceOrientations];

您对其余方法也使用相同的方法。

【讨论】:

如您所说,我的 ViewController 位于自定义 NavigationController 中。我试试你的建议,但它还是轮换了。 也许尝试将 shouldAutorotate return NO 添加到其他视图控制器?但我认为这没有必要。 也没有用。看起来它只关心可用的方向,并且不使用此方法(即使它们被调用,只需检查一下) 你是对的,正如你所说,我需要一个自定义的导航控制器。我的问题是由于我的横向菜单。

以上是关于即使我阻止横向旋转,屏幕也在旋转的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 Android 应用程序旋转? [复制]

iPhone:如何防止视图旋转到横向视图?

阻止移动网页上的设备旋转

防止Android上的屏幕旋转

Android旋转屏幕时阻止activity重建

在 Universal Xcode 6 项目中仅停止 iPhone 屏幕旋转