iOS WKWebView 加载HTML高度不精确,留有空白的解决方案

1.查找img标签,添加宽度设置

    NSString *result = [NSString stringWithFormat:@"<%@ %@",@"img",@"style='display: block; max-width: 100%;'"];

2.将设置的img标签插入到HTML数据中,对获取的HTML数据进行格式组装

    NSString*contentStr = additionalInfo[@"description"];

    contentStr = [contentStr stringByReplacingOccurrencesOfString:@"<img" withString:result];

    NSString *htmlStr = [NSString stringWithFormat:@"<html><head><meta http-equiv=\'Content-Type\' content=\'text/html; charset=utf-8\'/><meta content=\'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;\' name=\'viewport\' /><meta name=\'apple-mobile-web-app-capable\' content=\'yes\'><meta name=\'apple-mobile-web-app-status-bar-style\' content=\'black\'><link rel=\'stylesheet\' type=\'text/css\' /><style type=\'text/css\'> .color{color:#576b95;}</style></head><body><div id=\'content\'>%@</div>", contentStr];

3.wkwebview加载HTML

    [_webView loadHTMLString:safeString(htmlStr) baseURL:nil];

4.获取HTML高度

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
    __block CGFloat webViewHeight=0;
    //获取内容实际高度(像素)@"document.getElementById(\"content\").offsetHeight;"
    [webView evaluateJavaScript:@"document.body.scrollHeight" completionHandler:^(id _Nullable result,NSError * _Nullable error) {
        // 此处js字符串采用scrollHeight而不是offsetHeight是因为后者并获取不到高度,看参考资料说是对于加载html字符串的情况下使用后者可以,但如果是和我一样直接加载原站内容使用前者更合适
        //获取页面高度,并重置webview的frame
        webViewHeight = [result doubleValue];
        NSLog(@"%f",webViewHeight);
        dispatch_async(dispatch_get_main_queue(), ^{
            if (webViewHeight != webView.bzHeight) {
                //高度重置
                _webView.bzHeight =webViewHeight*2;
                _scrollView.bzHeight = webViewHeight*2;
                NSLog(@"%f",_webView.width);
                [self.contentLin layoutIfNeeded];
                [self.contentLin setNeedsLayout];
            }
        });
    }];

    NSLog(@"结束加载");
}

补充(曾遇坑)

当wkwebview添加到tableView的cell中的时候需将中间添加一层scrollView进行加载wkwebview.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 题目有些残酷,可是怎么办呢,实话总是不好听啊。而且,越早明白这个道理,就会越早认清现实,就算活得不幸福,最起码可以...
    樊晓玲007阅读 1,691评论 0 3
  • 1.前言 集合的遍历操作是开发中最常见的操作之一,从C语言经典的for循环到利用多核cpu的优势进行遍历,开发中i...
    火星抄手阅读 1,098评论 0 3
  • id与class 命名规则:应该根据“是什么”,而不是“长什么样子”来命名。 差的命名:topNav; leftC...
    即寻阅读 223评论 0 1
  • 很多时候,宁愿被误会,也不想去解释。信与不信,就在你一念之间。懂我的人,何必解释。
    假装混咖啡界的诗人阅读 187评论 0 0