避免对一个视图控制器自动旋转?(Prevent autorotate for one view co

2019-07-20 07:35发布

我的应用程序可以自动旋转,但我需要在纵向模式的意见,只显示一个不知道如何实现这一目标。

我想这(除其他事项外),但有问题的看法仍然旋转:

//  ViewController.m

-(BOOL)shouldAutorotate
{            
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

可有人好心指出我做错了什么? 谢谢。

-编辑-

这是适用于iOS 6.1

Answer 1:

当一个UINavigationController参与,创建的一个类别UINavigationControlleroverride supportedInterfaceOrientations

 #import "UINavigationController+Orientation.h"

 @implementation UINavigationController (Orientation)

-(NSUInteger)supportedInterfaceOrientations
{
   return [self.topViewController supportedInterfaceOrientations];
}

-(BOOL)shouldAutorotate
 {
    return YES;
 }

@end  

现在,iOS的容器(如UINavigationController的)不咨询自己的孩子,以确定他们是否应该自动旋转。

如何创建一个类别
1.添加(下可可触摸目的的C类)的新文件
2. Category :方向上的UINavigationController
3.上面的代码添加到UINavigationController+Orientation.m



Answer 2:

斯威夫特3版接受的答案:

extension UINavigationController {

    open override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        // Change `.portrait` to whatever your default is throughout your app
        return topViewController?.supportedInterfaceOrientations ?? .portrait
    }

    open override var shouldAutorotate: Bool {
        return true
    }
}


Answer 3:

按照该文件 。

视图控制器可以重写supportedInterfaceOrientations方法,以限制支撑取向的列表。

因此,我们需要重写shouldAutorotatesupportedInterfaceOrientation目标view controllers

典型地,该系统调用仅在窗口或呈现以填充整个屏幕的视图控制器的根视图控制器此方法。

如果你有一个像你的目标很简单的配置,这将工作view controllerrootViewControllerwindow或呈现覆盖整个屏幕。

在情况下,当目标视图控制器的配置是复杂的就像嵌入在某些其它容器视图控制器。

子视图控制器通过他们的父视图控制器使用为他们提供了窗口的部分,不再在什么旋转,支持决策直接参与。

所以,可能是默认实现这些容器视图控制器不要求有孩子有supportedInterfaceOrientation偏好。

所以,让我们的目标child view controller指定有supportedIntefaceOrientation我们需要告诉有容器视图控制器这样做。

您还可以看看我以前的答案在这里 。

并在容器视图控制器嵌入时了解的UIViewController旋转。



文章来源: Prevent autorotate for one view controller?