在tableView的cell中嵌入UIWebView,通过在UIWebView的代理方法webViewDidFinishLoad中调用方法
[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"]
获取到webView的内容高度并刷新tableView的高度,这种写法显示很正常,但最近想把UIWebView替换成WKWebView,毕竟WKWebView不像UIWebView那么耗内存,而且加载速度也会有所提升,在使用WKWebView替
换UIWebView时就遇到了这样的问题:
在iOS11下,一切显示正常,但在iOS10下,当前屏幕区域显示正常,但往上滑动tableView时,发现下面一片空白,
WKWebView的后半部分没有显示,调试了好久,也百度了WKWebView的一些使用问题,最后在stackoverflow上看
到有人也遇到同样的问题,可能是WKWebView在滑动过程中不会自动刷新屏幕内容,所以需要在滑动tableView时强
制刷新WKWebView,才能完全显示WKWebView的内容,以下是代码:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (self.tableView == scrollView) {
for (UIView *cell in self.tableView.visibleCells) {
if ([cell isKindOfClass:[YourCustomCell class]]) {
[((YourCustomCell *)cell).webView setNeedsLayout];
}
}
}
}
附上stackoverflow的帖子:
https://stackoverflow.com/questions/39549103/wkwebview-not-rendering-correctly-in-ios-10
另外,WKWebView获取内容高度建议使用方法
[webView evaluateJavaScript:@"document.body.offsetHeight;" completionHandler:^(id _Nullable any, NSError * _Nullable error) {
//webView内容高度
NSString *heightStr = [NSString stringWithFormat:@"%@",any];
}];
不建议用
webView.scrollView.contentSize.height
因为我们经常会拦截Html的内容,插入js代码去修改图片使其自适应屏幕,如果使用webView.scrollView.contentSize.height
获取到的高度就不是实际内容的高度了。