【iOS开发笔记】WebView视频全屏播放后状态栏消失问题
2019-07-31 本文已影响0人
Mr_Ten
项目中总会遇到一些奇奇怪怪的问题,作为一个开发者开发项目,就像养一个孩子一样,你希望能够在你的掌控中,按照你想要的方式运行下去,但是它却总是让你不省心,一边学习一边解决吧!
1.问题描述
这次在项目中发现,使用WebView
加载的网页中,有视频的情况下,点击播放后视频会自动全屏播放,退出全屏后发现状态栏消失不见了,导航栏也上移到了手机屏幕顶部。
2.分析问题
2.1 先看下全屏播放时的视图层级
视图层级2.2 分析
状态栏是在视频全屏播放时被隐藏的,我们要做的就是在退出全屏播放的时候,把状态栏取消隐藏,我们要监听视频退出全屏时的方法。
由2.1中的图可以看到,当我们播放WebView
中的视频时,系统会增加一个UIWindow
层级,并在该层上增加一个AVPlayerviewController
播放器,来实现全屏播放,这里我们可以监听这个UIWindow
。
3.解决问题
3.1 添加监听
//监听UIWindow显示
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifica_beginFullScreen) name:UIWindowDidBecomeVisibleNotification object:nil];
//监听UIWindow隐藏
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifica_endFullScreen) name:UIWindowDidBecomeHiddenNotification object:nil];
3.2 实现监听方法,取消隐藏状态栏
#pragma mark - 通知 - 进入全屏
-(void)notifica_beginFullScreen {
NSLog(@"进入全屏");
}
#pragma mark - 通知 - 退出全屏
-(void)notifica_endFullScreen {
NSLog(@"退出全屏");
[[UIApplication sharedApplication]setStatusBarHidden:NO animated:NO];
}
4.解决收工,总结
播放
WebView
中的视频时,视频会全屏播放,这时系统会增加一个UIWindow
层来完成这个功能,并会隐藏状态栏,我们监听这个UIWindow
,当它隐藏时,也就是退出全屏的时候,重新设置取消状态栏隐藏,就解决问题了。