1. 程式人生 > >WebView自適應實際內容高度

WebView自適應實際內容高度

方法1:獲取webview中scrovllview的contentize進行設定

- (void)webViewDidFinishLoad:(UIWebView *)webView{

CGFloat webView_Height = [webView.scrollViewcontentSize].height;

CGRect newFrame = webView.frame;

    newFrame.size.height = webView_Height;

    webView.frame = newFrame;

NSLog(@"%s %f",__FUNCTION__,newFrame.

size.height);

}

方法2:執行js語句直接獲取html文件的dom高度

-(void)webViewDidFinishLoad:(UIWebView *)webView{

//JS呼叫的字串根據每個H5設定的不同而不同。

CGFloat webViewHeight= [[webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"]floatValue];

CGRect newFrame = webView.frame;

    newFrame.size.height = webViewHeight;

    webView.frame = newFrame;

NSLog(@"%s %f",__FUNCTION__,newFrame.size.height);

}

方法3.先將UIWebView的高度設為最小,然後再使用sizeThatFits就會返回剛好合適的大小

-(void)webViewDidFinishLoad:(UIWebView *)webView{

CGSize actualSize = [webView sizeThatFits:CGSizeZero];

CGRect newFrame = webView.frame;

    newFrame.size

.height = actualSize.height;

    webView.frame = newFrame;

NSLog(@"%s %f",__FUNCTION__,newFrame.size.height);

}


方法4.遍歷webview子檢視獲取UIWebDocumentView高度即實際高度

-(void)webViewDidFinishLoad:(UIWebView *)webView{

CGFloat webViewHeight = 0.0f;

if ([webView.subviewscount] > 0)

    {

UIView *scrollerView = webView.subviews[0];

if ([scrollerView.subviewscount] > 0)

        {

UIView *webDocView = scrollerView.subviews.lastObject;

if ([webDocView isKindOfClass:[NSClassFromString(@"UIWebDocumentView"class]])

            {

                webViewHeight = webDocView.frame.size.height;//獲取文件的高度

                webView.frame= webDocView.frame//更新UIWebView 的高度

            }

        }

    }

NSLog(@"%s %f",__FUNCTION__,webViewHeight);

}

有時候以上四種方法獲取的高度不是內容的高度,這是因為有很多web頁面中有大量的css,js,使webViewDidFinishLoad不能完全監聽到webview載入完成,也會使用html標籤的高度改變。

另外WebView的幾個重要的協議方法呼叫順序為

1.- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

2.- (void)webViewDidStartLoad:(UIWebView *)webView;

3.-(void)webViewDidFinishLoad:(UIWebView *)webView;