WKWebView在iOS10下的奇怪渲染问题

在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

获取到的高度就不是实际内容的高度了。






你可能感兴趣的:(iOS)