方法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);
}
-(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;