UIWebView 高度在多个图片及文本的情况下怎样求高度呢?

2016-01-14 18:16:08 +08:00
 kenshinhu
经过很多次试验得知
原来 UIWebivew 下无论通过 js 或 objc 取得高度的方法都是不准确的
尤其在有多个图片的情况下尤其显示
感觉是 webview 下的图片异步加载而导致的
但如果先取得 html 里的所有图片先下载的话,又感觉体验不好
有办法可以取得 webview 在 加载所有请求后完成的高度吗?
2889 次点击
所在节点    iDev
9 条回复
superleexpert
2016-01-14 18:39:31 +08:00
web 端的图片设置成异步占位加载, app 端调用 JS:document.body.scrollHeight;获取高度。

如追求体验的话,可以把 JS 、 CSS 等 web 样式模板全部预先保存到本地,请求时只去拿 html string ,然后套模板加载,比如 某某新闻 App 。
banxi1988
2016-01-14 20:04:15 +08:00
我有两种方法你试试
1) 一种是 通过 JS 在 window.onLoad 方法之后,计算高度.这个计算高度则需要.计算最高的高度.
参考 :<http://stackoverflow.com/questions/1145850/how-to-get-height-of-entire-document-with-javascript>
2) 另一种是 通过 KVO 监听 webview.scrollView.contentSize 这样也是可行的.
Panway
2016-01-14 20:18:35 +08:00
别用 js 计算了,也别用 sizeThatFits ,这个才是最精确最简单的
- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
aWebView.scrollView.scrollEnabled = NO;
CGRect frame = aWebView.frame;
frame.size.width = 200;
frame.size.height = 1;
aWebView.frame = frame;
frame.size.height = aWebView.scrollView.contentSize.height;
aWebView.frame = frame;
}

来自 http://stackoverflow.com/a/13096183
MajestySolor
2016-01-14 20:34:58 +08:00
3 楼这个写法帅呆了
sablib
2016-01-14 21:00:27 +08:00
对啊,就像3楼一样。
webview 它也是一个 scroll view ,直接取 contentSize 吧。
kenshinhu
2016-01-14 21:27:50 +08:00
@sablib webViewDidFinishLoad 这个貌似达不到想要的效果,像公众号这个的多图页面, webViewDidFinishLoad 可以在图片未下载完成已经调用了
@banxi1988 kvo 监听这个好像可以,这个理论上是比较可靠的办法
muzuiget
2016-01-14 21:30:45 +08:00
图片高度未知的话,没办法的吧,加载的时候肯定不停撑长网页高度。要不就用 css 给每张图片预定义好高度,这样 domready 是网页高度就固定了。
muzuiget
2016-01-14 21:32:21 +08:00
想了下不对, domready 时 css 也可能未必完全解析完,延迟一点在取也就差不多。
kenshinhu
2016-01-14 21:36:23 +08:00
@muzuiget 这我看淘宝的产品也在躲开这个问题,看看客户的商品详情界面就有了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/250778

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX