在横向模式下播放video后,状态栏中的导航栏

问题:

以横向模式播放video后,导航栏在状态栏下。

应用程序:

  • 仅限iOS9。
  • 只支持肖像模式。
  • 视图控制器上有一个Web视图,Web视图将打开一个YouTube的链接
  • 视图控制器被embedded在导航控制器中

设置重现:

  1. 在webView中播放video,
  2. 将设备置于横向模式。
  3. closures横向模式下的video播放,应用程序回到纵向模式
  4. 导航栏位置错误

截图:

  1. 当应用程序打开

当应用程序打开

  1. 播放器video并把设备放在风景中

在这里输入图像说明

  1. 问题

在这里输入图像说明

Swift 3

在呈现视图控制器中,覆盖prefersStatusBarHidden属性,只有状态栏处于横向时才隐藏状态栏。

 override var prefersStatusBarHidden: Bool { return UIApplication.shared.statusBarOrientation.isLandscape } 

然后为设备旋转时添加一个观察者。

 override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(videoDidRotate), name: .UIDeviceOrientationDidChange, object: nil) } 

在观察者的方法中,调用setNeedsStatusBarAppearanceUpdate

 func videoDidRotate() { self.setNeedsStatusBarAppearanceUpdate() } 

这应该做到这一点。

@Aaron的回答几乎可行,只有一个问题:当您在video中点击“完成”,同时仍然横向握住设备,它将不会显示状态栏,直到您将设备旋转到肖像。

在这种情况下,我已经添加通知观察员,当“完成”button被点击,然后我切换到肖像编程。

我的代码在Objective C中:

 - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoDidRotate) name:UIDeviceOrientationDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closedFullScreen:) name:UIWindowDidBecomeHiddenNotification object:nil]; } -(void)closedFullScreen:(NSNotification *)myNotification{ [[UIDevice currentDevice] setValue: [NSNumber numberWithInteger: UIInterfaceOrientationPortrait] forKey:@"orientation"]; } - (BOOL)prefersStatusBarHidden { return UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation); } - (void)videoDidRotate { [self setNeedsStatusBarAppearanceUpdate]; } 

编辑:

.plist文件中基于视图控制器的状态栏外观必须设置为YES。

这很简单,

迅速3

 override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews(); UIApplication.shared.isStatusBarHidden = false }