iOS开发

WKWebview播放视频之后返回导航栏上移

2018-11-26  本文已影响128人  chasitu

今天测试APP的时候发现一个问题,复现比较困难,所以描述的有点多,具体如下:

  1. 当前控制器是push的方法压栈进来的,然后隐藏了导航栏,
  2. wkwebview加载网页,网页里面的video标签,调用了iOS系统的播放器播放视频,
  3. 播放结束之后关闭播放器,点击左上角的返回按钮返回,然后导航栏上移了,
    纯wkwebview,无导航栏
    返回之后导航栏上移

经过一天的努力确定问题原因

wkwebview点击视频播放的时候会调用系统AVPlayerViewController来播放的,具体步骤:
先隐藏当前window的状态栏-->当天window的页面会上移20像素-->再创建新的window显示出来-->把系统播放器加载之后添加到新的window上面进行播放-->播放停止dissmis或者下滑返回

小伙伴们应该看出来问题的所在了,就是返回操作之后系统没有给我们显示状态栏,以及上移的20像素等相关操作,是不是很恶心

解决

方法一:就是让前端的兄弟添加下面的属性,禁止调用系统播放器(比较简单粗暴)

IOS 视频禁止全屏播放 前端将video标签加入属性 webkit-playsinline,如:<video id="player" width="480" height="320" webkit-playsinline>;

方法二:如果必须使用系统播放器的需求,跟我一样的就用下面的方法
  1. 监听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
}

然后注释掉这个设置


注释该行代码

注:

  1. 上面是监听的通知,监听window的隐藏,做相关操作
  2. 下面是实现方法,解释一下,

今天测试了很多的方法,没有解决我的问题,只有这个方法简单的解决了问题,还是觉得这个方法并不好,如果小伙伴们有更好的办法,请留言给我,谢啦

上一篇下一篇

猜你喜欢

热点阅读