我有一个UIViewController,我在其中覆盖了这两种方法:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return UIInterfaceOrientationMask.Portrait
}

override func shouldAutorotate() -> Bool {
    return false
}


我的设备方向在纵向,横向和横向上打勾。

我清理了构建文件夹。

我的问题是:当我去风景时,该应用会更改方向。

不知道怎么了。我认为重写这两种方法就足够了,但似乎还不够。

最佳答案

由于您的视图控制器嵌入在UINavigationController中,并且单独覆盖相应视图控制器中的shouldAutorotate()不会起作用,因为它会检查UINavigationController / UITabBarController的shouldAutoRotate(),因此您将必须创建UINavigationController的扩展

extension UINavigationController {
    public override func shouldAutorotate() -> Bool {
        return visibleViewController.shouldAutorotate()
    }
}


并且在相应的视图控制器中,无论您要根据需求锁定方向,都应覆盖shouldAutoRotate()

override func shouldAutorotate() -> Bool {
    return false
}

关于ios - UIViewController更改方向,但告诉您不要这样做,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33338867/

10-14 22:17