无法在 AVPlayerViewController 的纵向模式下隐藏状态栏

Can't hide status bar in AVPlayerViewController's portrait mode

我正在开发一个应用程序,它首先显示一个带有一堆按钮的 UICollectionView,这些按钮以模态方式打开带有自定义 "Over Full Screen" segue 的 AVPlayerViewController 的子类。 UIViewControllerBasedStatusBarAppearance 在我的 Info.plist.

中设置为 YES

这是 Interface Builder 中所有视图控制器的小屏幕截图(抱歉,不得不缩小):

segue 是在 IB 中定义的。当用户点击集合视图单元格时,我使用 performSegueWithIdentifier() 来执行 segue。

我现在遇到的问题是:

为什么状态栏在横向模式下与播放控件一起隐藏,而在纵向模式下恰恰相反?

在我的 AVPlayerViewController 子类中将 prefersStatusBarHidden() return 设置为 true 不会执行任何操作。给出了什么?

刚想出解决办法:

extension UINavigationController {
    public override func childViewControllerForStatusBarHidden() -> UIViewController? {
        return self.childViewControllers.last
    }

    public override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return self.childViewControllers.last
    }
}

是的,只需在您的应用程序中覆盖 所有 导航视图控制器的这两个函数。我认为这是一个技巧,而不是 'correct' 解决此问题的方法,因此请谨慎使用。

据我所知,这应该永远不会失败。在我的应用程序中,每个 Navigation VC 都有一个 child VC,但是 YMMV.