暂时将应用限制为特定方向

Temporarily restrict app to specific orientation

我有一个支持所有方向的应用程序,但在某些情况下我想暂时将其限制为仅纵向。它不是只需要纵向的视图控制器和可以是任何方向的视图控制器的混合体,相反,我想在用户单击屏幕上的按钮时禁用方向更改,而视图控制器保持不变。

在寻找限制 UIViewController 的 UI 方向的方法时,弹出的方法是 supportedInterfaceOrientations()preferredInterfaceOrientationForPresentation()。两者都不太适合我:

有什么方法可以达到我想要的效果吗?

我假设您的视图控制器位于导航控制器中。如果没有导航控制器,只要设备旋转,就会调用 supportedInterfaceOrientations()。然而,当嵌入到导航控制器中时,导航控制器决定视图控制器是否应该旋转。 (见下面的例子)

你需要做什么?在自定义 UINavigationController 中实现 supportedInterfaceOrientations() ,如下所示:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    if self.topViewController is RootViewController {
        return .Portrait
    } else {
        return .All
    }
}

这是 this 的重复问题,但我没有看到 swift 示例。对于任何 class 您想保持纵向的内容,只需将 RootViewController 替换为 class 名称即可。