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
}
我有一个 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
}