无法在 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.
我正在开发一个应用程序,它首先显示一个带有一堆按钮的 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.