iOS中如何精確計算WebView的高度

  • 在開發(fā)app的過程中難免會遇到將webView加載到tableView的cell上的需求,一般遇到這種問題,通常想到的思路就是在webView的回調(diào)方法webViewDidFinishLoad中獲取到webView的高度,刷新tableView,將高度賦值給tableView的回調(diào)方法heightForRow。看似沒有任何問題,但是在實際操作的時候卻發(fā)現(xiàn)得到的高度并不是webView的實際高度,顯然這種方法是行不通的。其實并不是方法不行,而是webViewDidFinishLoad代理方法被調(diào)用時,頁面并不一定完全展現(xiàn)完成,可能有圖片還未加載出來,導(dǎo)致此時獲取的高度是并不是最終高度,過會兒圖片加載出來后,瀏覽器會重新排版,而我們在這之前給了一個錯誤高度,導(dǎo)致顯示異常。既然這種方法行不通,那么到底如何才能準確計算webView的高度呢?答案是監(jiān)聽,具體的實現(xiàn)過程如下:
  • webView的scrollViewcontentSize屬性添加監(jiān)聽,每當內(nèi)容發(fā)生變化,contentSize一定會跟著變,捕獲這個變動,在監(jiān)聽方法中實現(xiàn)webViewDidFinishLoad中的代碼,也就是獲取最新的內(nèi)容高度賦給webView
//添加監(jiān)聽
[_WebView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"WejinWuLiuViewController"];
//監(jiān)聽回調(diào)
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    
    if ([keyPath isEqualToString:@"contentSize"]) {
        
        _webViewHeight = [_WebView.scrollView contentSize].height;
        CGRect newFrame = _WebView.frame;
        newFrame.size.height = _webViewHeight;
       _WebView.frame = newFrame;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容