WKWebview播放视频之后返回导航栏上移
2018-11-26 本文已影响128人
chasitu
今天测试APP的时候发现一个问题,复现比较困难,所以描述的有点多,具体如下:
- 当前控制器是push的方法压栈进来的,然后隐藏了导航栏,
- wkwebview加载网页,网页里面的video标签,调用了iOS系统的播放器播放视频,
- 播放结束之后关闭播放器,点击左上角的
返回
按钮返回,然后导航栏上移了,
纯wkwebview,无导航栏
返回之后导航栏上移
经过一天的努力确定问题原因
wkwebview点击视频播放的时候会调用系统AVPlayerViewController来播放的,具体步骤:
先隐藏当前window的状态栏-->当天window的页面会上移20像素-->再创建新的window显示出来-->把系统播放器加载之后添加到新的window上面进行播放-->播放停止dissmis或者下滑返回
小伙伴们应该看出来问题的所在了,就是返回操作之后系统没有给我们显示状态栏,以及上移的20像素等相关操作,是不是很恶心
解决
方法一:就是让前端的兄弟添加下面的属性,禁止调用系统播放器(比较简单粗暴)
IOS 视频禁止全屏播放 前端将video标签加入属性 webkit-playsinline,如:<video id="player" width="480" height="320" webkit-playsinline>;
方法二:如果必须使用系统播放器的需求,跟我一样的就用下面的方法
- 监听UIWindow隐藏,做相关操作
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(endFullScreen) name:UIWindowDidBecomeHiddenNotification object:nil];
//通知回调
-(void)endFullScreen{
NSLog(@"退出全屏");
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
self.navigationController.navigationBar.frame = CGRectMake(0, -44, MainScreenWidth, 44);//矫正导航栏移位
#pragma clang diagnostic pop
}
然后注释掉这个设置
注释该行代码
注:
- 上面是监听的通知,监听window的隐藏,做相关操作
- 下面是实现方法,解释一下,
- 我的当前页面的导航栏是隐藏的,所以显示状态栏时自动上移20像素,系统自动调整
- 重新设置导航栏bar的内部位置
今天测试了很多的方法,没有解决我的问题,只有这个方法简单的解决了问题,还是觉得这个方法并不好,如果小伙伴们有更好的办法,请留言给我,谢啦