在横向模式下播放video后,状态栏中的导航栏
问题:
以横向模式播放video后,导航栏在状态栏下。
应用程序:
- 仅限iOS9。
- 只支持肖像模式。
- 视图控制器上有一个Web视图,Web视图将打开一个YouTube的链接
- 视图控制器被embedded在导航控制器中
设置重现:
- 在webView中播放video,
- 将设备置于横向模式。
- closures横向模式下的video播放,应用程序回到纵向模式
- 导航栏位置错误
截图:
- 当应用程序打开
- 播放器video并把设备放在风景中
- 问题
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 }