5

我有一个根视图控制器,它管理其中的所有其他控制器,所以我在所说的 rootViewController 中覆盖了 shouldAutorotate 和 supportedInterfaceOrientations,如下所示:

public override func shouldAutorotate() -> Bool {
    if let vc = view.window?.rootViewController?.presentedViewController {
        if NSStringFromClass(vc.classForCoder) == "AVFullScreenViewController" {
            return true
        }
    }
    return false
}

public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    if let vc = view.window?.rootViewController?.presentedViewController {
        if NSStringFromClass(vc.classForCoder) == "AVFullScreenViewController" {
            return UIInterfaceOrientationMask.AllButUpsideDown
        }
    }
    return UIInterfaceOrientationMask.Portrait
}

除了使用 AVPlayerViewController 查看全屏视频时,我的应用程序仅是纵向的。

上面的代码在整个应用程序中运行良好。我所有的控制器和他们的视图都保持纵向,当用户全屏拍摄视频时,它会毫无问题地旋转到横向。

我的问题是纵向模式下的状态栏没有附着在方向蒙版上并旋转为横向,但状态栏随后隐藏在横向中。另一个奇怪的是,当应用程序处于横向时,控制中心和通知中心现在可以像应用程序处于横向状态一样滑动打开。

最低支持的 iOS 是 9.0。有什么建议么?

4

1 回答 1

3

我最终在我的根视图控制器中删除了上述代码并将其添加到我的应用程序委托中。状态栏现在保持不变。

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
    if let vc = window?.rootViewController?.presentedViewController {
        if NSStringFromClass(vc.classForCoder) == "AVFullScreenViewController" {
            return UIInterfaceOrientationMask.AllButUpsideDown
        }
    }
    return UIInterfaceOrientationMask.Portrait
}
于 2016-04-15T17:02:15.880 回答