美文网首页程序员
获取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