我有一个非常简单的应用程序,UINavigationController 中有 3 个 UIViewControllers:
我希望前 2 个 UIViewControllers 只在纵向工作,最后一个只在横向工作。
我继承了 UINavigation 控制器并覆盖了三个方法:
class NavCtrl: UINavigationController {
override var shouldAutorotate: Bool {
return topViewController?.shouldAutorotate ?? super.shouldAutorotate
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return topViewController?.supportedInterfaceOrientations ?? super.supportedInterfaceOrientations
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return topViewController?.preferredInterfaceOrientationForPresentation ?? super.preferredInterfaceOrientationForPresentation
}
}
在我的前两个视图控制器中,我添加了:
override var shouldAutorotate: Bool {
return false
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
在我的最后一个观点中,我有:
override var shouldAutorotate: Bool {
return false
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .landscapeLeft
}
当我运行应用程序时,所有 3 个视图仅支持纵向,我的最后一个视图在横向中不起作用。我在 shouldAutorotate 和 supportedInterfaceOrientations (UINavigationController) 设置了断点,但只有在应用加载时调用一次,而在我旋转设备时调用一次,但在将视图控制器推送到导航控制器时不会调用。
我试图添加这一行:
UIViewController.attemptRotationToDeviceOrientation()
将 viewDidLoad 到我的最后一个视图控制器以强制重新加载方向但没有运气。
你知道我可以让我的应用程序符合我的要求吗?
谢谢