【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,当它隐藏时,也就是退出全屏的时候,重新设置取消状态栏隐藏,就解决问题了。

上一篇下一篇

猜你喜欢

热点阅读