V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
kenshinhu
V2EX  ›  iDev

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

  •  
  •   kenshinhu · 2016-01-14 18:16:08 +08:00 · 2895 次点击
    这是一个创建于 3239 天前的主题,其中的信息可能已经有所发展或是发生改变。
    经过很多次试验得知
    原来 UIWebivew 下无论通过 js 或 objc 取得高度的方法都是不准确的
    尤其在有多个图片的情况下尤其显示
    感觉是 webview 下的图片异步加载而导致的
    但如果先取得 html 里的所有图片先下载的话,又感觉体验不好
    有办法可以取得 webview 在 加载所有请求后完成的高度吗?
    9 条回复    2016-01-14 21:36:23 +08:00
    superleexpert
        1
    superleexpert  
       2016-01-14 18:39:31 +08:00
    web 端的图片设置成异步占位加载, app 端调用 JS:document.body.scrollHeight;获取高度。

    如追求体验的话,可以把 JS 、 CSS 等 web 样式模板全部预先保存到本地,请求时只去拿 html string ,然后套模板加载,比如 某某新闻 App 。
    banxi1988
        2
    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
        3
    Panway  
       2016-01-14 20:18:35 +08:00 via Android
    别用 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
        4
    MajestySolor  
       2016-01-14 20:34:58 +08:00
    3 楼这个写法帅呆了
    sablib
        5
    sablib  
       2016-01-14 21:00:27 +08:00
    对啊,就像3楼一样。
    webview 它也是一个 scroll view ,直接取 contentSize 吧。
    kenshinhu
        6
    kenshinhu  
    OP
       2016-01-14 21:27:50 +08:00
    @sablib webViewDidFinishLoad 这个貌似达不到想要的效果,像公众号这个的多图页面, webViewDidFinishLoad 可以在图片未下载完成已经调用了
    @banxi1988 kvo 监听这个好像可以,这个理论上是比较可靠的办法
    muzuiget
        7
    muzuiget  
       2016-01-14 21:30:45 +08:00
    图片高度未知的话,没办法的吧,加载的时候肯定不停撑长网页高度。要不就用 css 给每张图片预定义好高度,这样 domready 是网页高度就固定了。
    muzuiget
        8
    muzuiget  
       2016-01-14 21:32:21 +08:00
    想了下不对, domready 时 css 也可能未必完全解析完,延迟一点在取也就差不多。
    kenshinhu
        9
    kenshinhu  
    OP
       2016-01-14 21:36:23 +08:00
    @muzuiget 这我看淘宝的产品也在躲开这个问题,看看客户的商品详情界面就有了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2818 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:25 · PVG 08:25 · LAX 16:25 · JFK 19:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.