wkwebview 下移20像素_WKWebview播放视频之后返回导航栏上移

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

当前控制器是push的方法压栈进来的,然后隐藏了导航栏,

wkwebview加载网页,网页里面的video标签,调用了iOS系统的播放器播放视频,

播放结束之后关闭播放器,点击左上角的返回按钮返回,然后导航栏上移了,

纯wkwebview,无导航栏

返回之后导航栏上移

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

wkwebview点击视频播放的时候会调用系统AVPlayerViewController来播放的,具体步骤:

先隐藏当前window的状态栏-->当天window的页面会上移20像素-->再创建新的window显示出来-->把系统播放器加载之后添加到新的window上面进行播放-->播放停止dissmis或者下滑返回

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

解决

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

IOS 视频禁止全屏播放 前端将video标签加入属性 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的内部位置

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

补充:彻底解决了这个问题

当前情况简单说明一下:我的页面包含webview,webview内嵌导航栏的,按照原定计划我是不用显示导航栏的,可是因为这个bug,需要解决,

最终方案

我自己显示了原生导航栏,上面的功能按键都用OC原生写上去了,最终经过很长时间的测试,导航栏移位的问题不再出现了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值