遇坑情景
在项目中有一个使用WKWebView来加载新闻页面的情况,在一般的文字加图片的新闻当中,运行情况良好,但是突然发现有一些新闻页面内含有视频。在点击播放视频播放的时候,视频会自动全屏播放(这个不知道到是前端还是客户端的原因),退出全屏后发现状态栏消息不见了,导航栏也上移了20个像素。
视图层级分布剖析:
解决思路
状态栏是在视频全屏播放的时候被隐藏的,我们要做的就是在退出视频全屏播放的时候,把状态栏取消隐藏。因此我们需要找到监听,视频退出全屏时的方法。
视频全屏播放时的视图层级
视图层级
在这个视图层级中我们可以看到,当我们播放webView中的视频的时候,会进入全屏播放,系统会增加一个UIWindow层级,然后在该层级上增加一个AVPlayerviewController播放器,这里我们很难获得或者监听到这个播放器,但是我们可以监听这个新增的UIWindow。
代码
//监听UIWindow显示
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(beginFullScreen) name:UIWindowDidBecomeVisibleNotification object:nil];
//监听UIWindow隐藏
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(endFullScreen) name:UIWindowDidBecomeHiddenNotification object:nil];
-(void)endFullScreen{
NSLog(@"退出全屏");
[[UIApplication sharedApplication]setStatusBarHidden:false animated:false];
}
说明
播放webView内的视频的时候,视频会自动强制的全屏播放
(下面解释下这点:可以设置!!这个地方牵扯到WKWebView的config 中有一个属性config.allowsInlineMediaPlayback = YES;//是否允许内联(YES)或使用本机全屏控制器(NO),默认是NO。可以通过修改allowsInlineMediaPlayback的属性值,来控制网页中的视频是内联播放还是全屏播放)
当不设置allowsInlineMediaPlayback这个属性,默认是No.
全屏播放的时候,会增加一个UIWindow层,由于状态栏的隐藏是自动的,所以我只需要监听视频退出全屏,也就是UIWindow隐藏的时候,把状态栏取消隐藏!