iOS12 bug总结(持续更新)

第一、webview内打开全屏播放器播放完视频后,状态栏被隐藏

如上图,图一在视频未播放时状态栏正常,图二是全屏播放h5视频,图三退出全屏时状态栏消失。

修复:

全屏视频的播放本质上是新加了一个window,且该window最终包裹了视频播放的VC,当退出全屏视频时,其实是对应的window进行了隐藏,所以,我们可以监听window隐藏的通知:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(windowDidBecomeHidden:) name:UIWindowDidBecomeHiddenNotification object:nil];

在该通知触发时去把状态栏设置回来。

这种修改需要考虑以下几种情况:

1、当前应用可能同时存在多个webview,而且应用本身的某些页面存在确切的隐藏状态栏的需求,所以,不能简单的监听到通知后就把状态栏显示。因此:

第一、不能把这个逻辑放在webview这一层;

第二、这个逻辑可以放在webviewVC这一层,但是需要保证webviewVC正在展示才行;

扫描二维码关注公众号,回复: 3378175 查看本文章

第三、iOS12以上的条件;

第四、当前window确实时播放视频所加的window,其他window的变化不能触发该逻辑;

前三点很容易做到,第四点,我们的实现是这样的:


        UIWindow * win = (UIWindow *)noti.object;
        if(win){
            UIViewController *rootVC = win.rootViewController;
            NSArray<__kindof UIViewController *> *vcs = rootVC.childViewControllers;
            if([vcs.firstObject isKindOfClass:NSClassFromString(@"AVPlayerViewController")]){
                [[UIApplication sharedApplication]setStatusBarHidden:false animated:false];
            }
        }

这样就可以保证在确定的window隐藏时才触发设置状态栏的操作。

猜你喜欢

转载自blog.csdn.net/u012413955/article/details/82778856