2

我有一个非常简单的应用程序,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 到我的最后一个视图控制器以强制重新加载方向但没有运气。

你知道我可以让我的应用程序符合我的要求吗?

谢谢

4

0 回答 0