UIViewController 在被告知不要这样做时更改方向

UIViewController changes orientation while told not to do so

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

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
}