更改方向时无法自动旋转开火

cannot get shouldautorotate to fire when changing orientation

我正在使用 Swift4 Xcode9 开发一个应用程序,它最初只适用于 iPad,但现在也需要 运行 在手机上使用。我需要将手机锁定为纵向模式,而 iPad 仍然 Portrait/Landscape。

我在使用 shouldautorotate 函数并根据设备返回 true 或 false 之前完成了此操作,如下所示。

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

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

但是,当我改变方向时它不会触发。这是另一种贬值的方法吗?如果是,我现在如何限制方向?

如果你的视图控制器嵌入到 UINavigationControllerUITabBarController,那么这个 shouldAutorotate() 是从他们那里查询的,因为这个容器是最顶层的视图控制器。在 iOS 更新后,它不会询问是否需要旋转视图控制器。因此,您可以使用您的自定义子类并在运行时创建它或在您的故事板中提供自定义 calss:

import UIKit
class CustomNavigationController: UINavigationController {
    override var shouldAutorotate: Bool {
        return self.viewControllers.last?.shouldAutorotate ?? true
    }
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return self.viewControllers.last?.supportedInterfaceOrientations ?? .all
    }        
}

经过多次谷歌搜索,这对我有用