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