一、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;
}