UIWebView和WKWebView加載網(wǎng)頁獲取內(nèi)容高度

UIWebView獲取網(wǎng)頁高度

> 方法一
根據(jù)webview內(nèi)嵌的scrollView的contentSize.height去計算高度:
-(void)webViewDidFinishLoad:(UIWebView *)webView {

    CGFloat height = 0.0;
    [webView sizeToFit];
    height = webView.scrollView.ContentSize.height;
    CGRect webFrame = webView.frame;
    webFrame.size.height = height;
    webView.frame = webFrame;
}
> 方法二
-(void)webViewDidFinishLoad:(UIWebView *)webView {

    CGFloat height = [[webView stringByEvaluatingJavascriptFromString:@"document.body.offsetHeight"] floatValue];
    //ps:js可以是上面所寫,也可以是document.body.scrollHeight;個人覺得兩者在UIWebView中都可以,但是在WKWebView中就不同了,后面會有介紹
    CGRect webFrame = webView.frame;
    webFrame.size.height = height;
    webView.frame = webFrame;
}
> 方法三:遍歷UIWebView的所有子視圖,找到中間的UIWebViewScrollView或者UIWebBrowserVeiw,獲取到它的frame設(shè)定給webView
-(void)webViewDidFinishLoad:(UIWebView *)webView {
     if(webView.subViews.count > 0) {
     for(UIView *view in webView.subViews) {
    // if([view iskindOfClass:NSClassFromString:@"UIWebViewScrollView"]){
  //   webView.frame = view.frame;
   //  }
           UIScrollView *scrollView = webView.subViews[0];
          for (UIView *view in scrollView.subViews) {
          if([view iskindOfClass:NSClassFromString:@"UIWebBrowserVeiw"]){
           webView.frame = view.frame;
         }
      }
   }
 }

ps:經(jīng)過驗證,以上三種方法都是可行的,但是會出現(xiàn)一個問題,有的時候依然獲取不到高度,或者高度不正確,這個時候有一個處理方法,是在didFinishLoad里面第一次獲取之后隔一到兩秒再獲取一次,就可以獲取到了,至于原因,我也不知道。

WKWebView獲取內(nèi)容高度

> 方法一
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
 CGFloat height = 0.0;
    [webView sizeToFit];
    height = webView.scrollView.ContentSize.height;
    CGRect webFrame = webView.frame;
    webFrame.size.height = height;
    webView.frame = webFrame;

}
> 方法二
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
 [webView evaluateJavaScript:@"document.body.offsetHeight" completionHandler:^(id data, NSError * _Nullable error) {
  CGFloat height = [data floatValue];
    //ps:js可以是上面所寫,也可以是document.body.scrollHeight;在WKWebView中前者offsetHeight獲取自己加載的html片段,高度獲取是相對準(zhǔn)確的,但是若是加載的是原網(wǎng)站內(nèi)容,用這個獲取,會不準(zhǔn)確,改用后者之后就可以正常顯示,這個情況是我嘗試了很多次方法才正常顯示的
    CGRect webFrame = webView.frame;
    webFrame.size.height = height;
    webView.frame = webFrame;
}];
  
}
> 方法三:遍歷WKWebView的所有子視圖,找到中間的WKContentView,獲取到它的frame設(shè)定給webView
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
     if(webView.subViews.count > 0) {
     for(UIView *view in webView.subViews) {
     
          if([view iskindOfClass:NSClassFromString:@"WKContentView"]){
          webView.frame = view.frame;
          }
   }

ps:兩種webview的第三種方法需要自己打印出來webView.subViews去觀察一下,有很大不同,前兩種方法是比較常用的,一般情況下能滿足要求,特別一點是:我在做項目的時候發(fā)現(xiàn),有時候第一次獲取高度是獲取不到的,這個時候我就強制在第一次獲取之后隔1s再去獲取一次,刷新webView,這個時候就能獲取到了

當(dāng)然這只是我在做項目的過程中所遇到的問題,并多次嘗試解決的,也不一定適合所有的情況,若是有別的情況,或者有更多更好的方法歡迎交流學(xué)習(xí)

最后編輯于
?著作權(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)容