UIWebView根据内容自适应高度

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值