Objective-c

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

2018-03-07  本文已影响1436人  猿姑凉

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.

上一篇下一篇

猜你喜欢

热点阅读