获取webview内容高度

方法一:js调用

//页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
    WS(weakSelf);
    [webView evaluateJavaScript:@"document.body.offsetHeight;" completionHandler:^(id _Nullable any, NSError * _Nullable error) {

        NSString *heightStr = [NSString stringWithFormat:@"%@",any];

        weakSelf.webHeight = heightStr.floatValue;

}

注:有时webview无论是JS获取,还是contentSize获取,最后结果都难以获取到准确高度,并非方法不行,而是,webViewDidFinishLoad代理方法被调用时,页面并不一定完全展现完成,可能有图片还未加载出来,导致此时获取的高度是偏小的,过会儿图片加载出来后,浏览器会重新排版网页被撑大,而我们之前给的高度不够内容的展示,导致显示异常。

方法二:kvo

给webView的scrollView的contentSize属性添加监听,每当内容发生变化,contentSize一定会跟着变,捕获这个变动。

[self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
    if ([keyPath isEqualToString:@"contentSize"]) {
        CGSize fittingSize = [self.webView sizeThatFits:CGSizeZero];
        NSLog(@"-------%@",NSStringFromCGSize(fittingSize));
    }
}

推荐阅读更多精彩内容