iOS中获取UIWebView的高度,当嵌套在UITableView中。

在实际开发中,经常碰见用富文本来展示内容,但有时候并不是整个界面都是富文本,这就出现半原生半富文本。这时候就需要使用UITableView嵌套UIWebView,把UIWebView添加到cell里面来展示。唯一需要解决的问题就是监控UIWebView的高度。下面讲述两种方法来监控高度。

一、在webViewDidFinishLoad方法里进行监控

   CGFloat height = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
   self.webView1.frame = CGRectMake(self.webView1.frame.origin.x,self.webView1.frame.origin.y, SWidth, height+20);  
    [self.tableView reloadData];

这种方法有时候会出现计算偏差,导致你的网页被砍掉了一部分,没有显示出来。原因是由于网页有包含大量图片,当webView加载完成的时候,其实并没有把图片加载出来,也就是说调用webViewDidFinishLoad这个方法的时候,其实网页里面图片还没有加载出来。导致图片的高度并没有计算出来。所以导致计算出现偏差。方法二就解决了这个问题。

二、通过KVO(键值监听机制)进行监控高度

首先我们要注册观察者

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

其次我们实现其代理方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
if ([keyPath isEqualToString:@"contentSize"]) {
        CGSize fittingSize = [_webView sizeThatFits:CGSizeZero];
        NSLog(@"webview %@",NSStringFromCGSize(fittingSize));
        CGRect webFrame = _webView.frame;
        webFrame.size.height = fittingSize.height;
        _webView.frame = webFrame;
        [self.webTableView reloadData];
    }
}

最后记得移除观察者

[self.webView removeObserver:self forKeyPath:@"contentSize"];

这样就可以完美解决UIWebView高度问题。

希望能帮助到你。

Best regards

Roger

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,887评论 1 32
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,699评论 4 61
  • 今日大雨,雷声闪电并作。 我又虚度一天光阴,颇感懊恼。 因看些公益记录片的缘故,我越是发觉学中医势在必行。我着急,...
    麟聿阅读 1,292评论 0 1
  • 看到一篇文章,讲什么是抑郁呢,最后说到抑郁是爱的附属品,以前有位老师说过,我们每天都在制造被爱的机会,不会放过任何...
    阿难说阅读 1,490评论 0 1

友情链接更多精彩内容