iOS 在WebView內點擊視頻全屏播放,退出后導致狀態欄消失

遇坑情景

在項目中有一個使用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隱藏的時候,把狀態欄取消隱藏!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容