iOS webView自适应高度

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

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

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

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

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

添加观察者

[_webView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];

观察结果处理

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
if ([keyPath isEqualToString:@"contentSize"]) {
    CGSize webViewSize = [_webView sizeThatFits:CGSizeZero];
    _webView.frame = CGRectMake(0, 0, webViewSize.width, webViewSize.height);
}
}

你可能感兴趣的:(iOS webView自适应高度)