WebView自适应实际内容高度

方法1:获取webview中scrovllview的contentize进行设置

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

    CGFloat webView_Height = [webView.scrollView contentSize].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.subviews count] > 0)

    {

        UIView *scrollerView = webView.subviews[0];

        if ([scrollerView.subviews count] > 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标签的高度改变。

以上转自:http://www.skyfox.org/ios-webview-autofit-content-height.html


另外WebView的几个重要的协议方法调用顺序为

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


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


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


你可能感兴趣的:(iOS开发)