美文网首页iOS学习笔记iOS程序猿iOS开发总结
iOS 在WebView内点击视频全屏播放,退出后导致状态栏被隐

iOS 在WebView内点击视频全屏播放,退出后导致状态栏被隐

作者: 我是何先生 | 来源:发表于2018-08-09 09:31 被阅读8次

    遇坑情景

    在项目中有一个使用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内的视频的时候,视频会自动强制的全屏播放(前面已经提及,不清楚是Html的原因,还是webview的设置问题,了解的朋友可以解析一下。)全屏播放的时候,会增加一个UIWindow层,由于状态栏的隐藏是自动的,所以我只需要监听视频退出全屏,也就是UIWindow隐藏的时候,把状态栏取消隐藏!

    相关文章

      网友评论

      本文标题:iOS 在WebView内点击视频全屏播放,退出后导致状态栏被隐

      本文链接:https://www.haomeiwen.com/subject/ahxqbftx.html