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.