遇坑情景
在項目中有一個使用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內的視頻的時候,視頻會自動強制的全屏播放
(下面解釋下這點:可以設置!!這個地方牽扯到WKWebView的config 中有一個屬性config.allowsInlineMediaPlayback = YES;//是否允許內聯(YES)或使用本機全屏控制器(NO),默認是NO。可以通過修改allowsInlineMediaPlayback的屬性值,來控制網頁中的視頻是內聯播放還是全屏播放)
當不設置allowsInlineMediaPlayback這個屬性,默認是No.?
全屏播放的時候,會增加一個UIWindow層,由于狀態欄的隱藏是自動的,所以我只需要監聽視頻退出全屏,也就是UIWindow隱藏的時候,把狀態欄取消隱藏!