webView自适应实际内容高度的问题

刚解决了一个问题,很开心,记录一下。

问题描述:

项目详情要用h5展示,加载webView,高度不确定,需要根据webView的内容高度去设置。webView可以在加载完成时获取到网页内容高度,然后再去改变webView的frame即可。

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    float height = webView.scrollView.contentSize.height;
    NSLog(@"height:%.2f",height);
    
    CGRect newFrame = webView.frame;
    newFrame.size.height = height;
    webView.frame = newFrame;
}

这段代码去加载百度等网址没问题,但是换成我们项目需要的h5的地址就不能获取到contentSize网页内容高度,contentSize.height的值总是初始化webView时设置的height。

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
原因:

跟做前端h5的同事沟通后,发现问题的原因是:我们前端用的是angular去渲染数据的,页面加载完成后,html执行结束,但是angularJS还没完毕,获取到的网页没有内容,网页高度不对。

解决办法:

在webViewDidFinishLoad里延时调用获取contentSize即可。

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [self performSelector:@selector(changeWebViewHeight) withObject:nil afterDelay:1];
}
- (void)changeWebViewHeight {
    float height = webView.scrollView.contentSize.height;
    NSLog(@"height:%.2f",height);
    CGRect newFrame = webView.frame;
    newFrame.size.height = height;
    webView.frame = newFrame;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,761评论 25 709
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,817评论 1 92
  • 很多时候,人,总有一种错觉,我以为。 没有准备的成功永远都迷路在半路上,每次意外的失败都会是我以为我可以。 我以为...
    942b3b3cc360阅读 207评论 0 0
  • 有一种爱是想要触碰,却又不得不在无奈间悄悄的收回伸出的手。不是不爱,也不是爱而不得,而是不能去爱,这种爱一旦违背自...
    小王同学Y阅读 1,287评论 3 17
  • 这篇文章会对android 的 触摸事件做一个简要的分析.下面是我重做的一些图片,用以分析事件的传递过程. 主要分...
    LLS不想挂机了阅读 313评论 0 3