美文网首页iOS DeveloperIOS
webView高度自适应

webView高度自适应

作者: 见哥哥长高了 | 来源:发表于2017-04-21 11:24 被阅读571次

    开发中,一些地方用到webView需要根据其内容的多少来动态的计算高度并且自适应。但是往往获取到的高度并不是那么的精准,以至于布局错乱。

    我们以往的做法是:在webView的回调方法webViewDidFinishLoad中获取网页内容高度,设置为webView的高度,调整webView布局。

    实际上:webViewDidFinishLoad代理方法被调用时,页面并不一定完全展现完成,可能有图片还未加载出来,导致此时获取的高度是并不是最终高度,过会儿图片加载出来后,浏览器会重新排版,而我们在这之前给了一个错误高度,导致显示异常。

    那么,如何能在webViewDidFinishLoad之后获取到网页内容高度的变化?

    答案在此:给webView的scrollView的contentSize属性添加监听,每当内容发生变化,contentSize一定会跟着变,捕获这个变动,在监听方法中实现webViewDidFinishLoad中的代码,也就是获取最新的内容高度赋给webView:

    添加观察者

        [_webView 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 webViewSize = [_webView sizeThatFits:CGSizeZero];
            _webView.frame = CGRectMake(0, 0, webViewSize.width, webViewSize.height);
        }
    }
    

    相关文章

      网友评论

        本文标题:webView高度自适应

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