第一、webview内打开全屏播放器播放完视频后,状态栏被隐藏
如上图,图一在视频未播放时状态栏正常,图二是全屏播放h5视频,图三退出全屏时状态栏消失。
修复:
全屏视频的播放本质上是新加了一个window,且该window最终包裹了视频播放的VC,当退出全屏视频时,其实是对应的window进行了隐藏,所以,我们可以监听window隐藏的通知:
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(windowDidBecomeHidden:) name:UIWindowDidBecomeHiddenNotification object:nil];
在该通知触发时去把状态栏设置回来。
这种修改需要考虑以下几种情况:
1、当前应用可能同时存在多个webview,而且应用本身的某些页面存在确切的隐藏状态栏的需求,所以,不能简单的监听到通知后就把状态栏显示。因此:
第一、不能把这个逻辑放在webview这一层;
第二、这个逻辑可以放在webviewVC这一层,但是需要保证webviewVC正在展示才行;
扫描二维码关注公众号,回复:
3378175 查看本文章
第三、iOS12以上的条件;
第四、当前window确实时播放视频所加的window,其他window的变化不能触发该逻辑;
前三点很容易做到,第四点,我们的实现是这样的:
UIWindow * win = (UIWindow *)noti.object;
if(win){
UIViewController *rootVC = win.rootViewController;
NSArray<__kindof UIViewController *> *vcs = rootVC.childViewControllers;
if([vcs.firstObject isKindOfClass:NSClassFromString(@"AVPlayerViewController")]){
[[UIApplication sharedApplication]setStatusBarHidden:false animated:false];
}
}
这样就可以保证在确定的window隐藏时才触发设置状态栏的操作。