一、webView通過内容擷取高度的幾個方法:
1、通過webview自帶的自适應方法:
CGSize size = [_webView sizeThatFits:CGSizeZero];
CGFloat webViewHeight = size.height;
2、通過webView可滾動的範圍擷取高度
CGFloat webViewHeight = [_webView.scrollView contentSize].height;
3、通過JS擷取高度
CGFloat webViewHeight = [[_webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
或:
CGFloat webViewHeight = [[_webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"]floatValue];
4、還有一種是通過周遊webView的SubView拿到UIWebDocumentView的高度,親測不怎麼好使就不列舉出來了。
二、以上幾個方法會有一個問題,就是當網頁内文字特别少的時候高度未超過螢幕高度,以上方法會傳回螢幕的高度,而不是具體内容高度,解決辦法如下:
首先先判斷通過以上方法擷取的高度是否大于螢幕高度,如果未超過螢幕高度,則通過計算文本高度來擷取網頁高度。
-(float)heightOfWebView:(UIWebView*)webView{
float realWebHeight = 0.0f;
CGFloat textHeight = [self webContentTextHeightOfWebView:webView];
NSLog(@"文本高度是:%f",textHeight)
;
CGSize size = [webView sizeThatFits:CGSizeZero];
NSLog(@"size.height = %f",size.height);
if (size.height > ScreenHeight*0.5f) {
realWebHeight = size.height;
}else
{
realWebHeight = textHeight;
}
return realWebHeight;
}
//通過字型的高度來擷取網頁高度
-(CGFloat)webContentTextHeightOfWebView:(UIWebView*)webView
{
NSMutableString* mutableDetailStr = [[NSMutableString alloc] initWithString:_webHtmlString];
[mutableDetailStr replaceOccurrencesOfString:@"<br/>" withString:@"\n" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [mutableDetailStr length])];
[mutableDetailStr replaceOccurrencesOfString:@" " withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [mutableDetailStr length])];
[mutableDetailStr replaceOccurrencesOfString:@"div" withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [mutableDetailStr length])];
CGSize size = CGSizeMake(_newsWeb.bounds.size.width, MAXFLOAT); //設定一個行高上限
NSDictionary *attribute = @{NSFontAttributeName:[UIFont systemFontOfSize:17]};
CGSize textSize = [mutableDetailStr boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:attribute context:nil].size;
return textSize.height - 50;
}