美文网首页程序员
获取webview内容高度

获取webview内容高度

作者: 鄂北 | 来源:发表于2019-01-07 15:42 被阅读20次

引言:在实际项目开发中,可能会遇到需要获取webview内容高度的情况,在这里小编提供几种获取的方式

1.使用KVO观察者模式

- (void)webViewDidFinishLoad:(UIWebView *)webView API_DEPRECATED("No longer supported.", ios(2.0, 12.0))
{
    //KVO监听
    [webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
}

在webview加载完成的代理方法中使用KVO监听webview内容改变情况。

在下面方法中获取高度。@"contentSize"是上个方法中的KeyPath

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"contentSize"]) {
        // 获取webview高度
        CGSize fittingSize = [self.webview sizeThatFits:CGSizeZero];
        CGFloat webviewHeight = fittingSize.height;
        NSLog(@"高度:%f",webviewHeight);
    }
}

sizeThatFits 这个方法后面的参数小编没搞懂具体有什么作用,因为发现后面参数值不同好像对获取的高度值没什么影响,有知道的朋友麻烦帮忙解下惑,不甚感激。

2.通过获取HTML body高度
这种方式比较简单直接

- (void)webViewDidFinishLoad:(UIWebView *)webView API_DEPRECATED("No longer supported.", ios(2.0, 12.0))
{
    CGFloat webviewHeigth = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
    NSLog(@"高度1:%f",webviewHeigth);
}

总结:第一个种方式是通过KVO来观察高度的变化,只要当高度改变的时候才会走KVO的方法,获取最新的高度值,如果高度不变就获取不到高度值。第二种方式就是通过HTML body来获取

相关文章

网友评论

    本文标题:获取webview内容高度

    本文链接:https://www.haomeiwen.com/subject/malurqtx.html