求 iOS 一个解决方案:关于在 TabelViewCell 中嵌套 UIWebView 加载 html,计算 UIWebView 高度的问题。

2015-10-10 14:56:46 +08:00
 VichyChen

TabelViewCell 嵌套 UIWebView , UIWebView 加载 html , html 中偶尔包括有<img>、<a>。

现在的问题是如何计算 UIWebView 的高度。
因为 UIWebView 的高度得在 webViewDidFinishLoad:中才能正确获取到,在 cell 中我是直接用 setFrame 来做定位的,现在我迷茫的就是要怎么准确计算出高度?

ps :如果用 setFrame 不好实现,用 autolayout 好实现吗?一直对 cell 中用 autolayout 来布局有点抗拒。。

现在的情况是哪种能实现就用哪种!求解决方案,求一个准确的思路!

9101 次点击
所在节点    iDev
36 条回复
newtonisaac
2015-10-11 13:36:43 +08:00
@VichyChen
webViewDidFinishLoad 之后记住这个高度,然后 reload cell
newtonisaac
2015-10-11 13:46:31 +08:00
@wujichao 恕我愚钝, heightforcell 是 delegate 吗?那我们不知道什么时候 call 这个 delegate ,也就没有“然后”了。
newtonisaac
2015-10-11 13:49:39 +08:00
@VichyChen 忘说了一点, webViewDidFinishLoad 之后,如果之前已经记住了这个高度,什么也不做。如果没有记住这个高度,则记住这个高度然后 reload 。
EggmanQ
2015-10-13 16:34:49 +08:00
http://stackoverflow.com/questions/19507639/uiwebview-doesnt-load-completely-height-varies

CGFloat height = [[_web stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];

然后通知 tableview 更新高度。

---------------------------------

我也是 tableviewcell 嵌套 UIWebview ,只能吐槽一下,技术敌不过需求。
ibcker
2015-10-13 23:40:16 +08:00
ibcker
2015-10-13 23:43:03 +08:00
webview 算高度不用那么费劲,调 sizeToFit 就出来了

@EggmanQ
@kenshinhu
@VichyChen
VichyChen
2015-10-14 09:04:51 +08:00
@EggmanQ @ibcker @wujichao
最终用了 @pljhonglu 的方案,把数据拼成一个 html 出来,这样就只需要一个 WebView 了。。实在是没办法的办法,能用原生谁想用 web 来写嘛=。=
ibcker
2015-10-14 10:47:31 +08:00
@VichyChen 这个办法不错
kenshinhu
2015-10-14 11:14:42 +08:00
@ibcker 不行的,这个方案试过,会有高度不一致的情况出现.这个取决于图片的数量及加载时间
ibcker
2015-10-14 11:19:05 +08:00
@kenshinhu 你确定是在 webview 加载完后调用的?我记得是行的才对,以前就是这么玩的
ibcker
2015-10-14 11:19:45 +08:00
@kenshinhu 以前好像我是直接取 webview 的 contentsize
kenshinhu
2015-10-14 11:29:07 +08:00
@ibcker 是的,加载这个是指 URL 响应回来之后 HTML 的渲染,但 WEBKIT 这里就会先处理 HTML 之后再处理加载图片的,没有图片情况下这个处理还可以的,有图片的情况下尤其 WEBKIT 并发请求图片埸景下会有使用 sizeTofit 时会有部分内容显示不完整的情况出现
lionyue
2015-10-14 13:16:11 +08:00
尽量别这么用, cell 多了,性能肯定是个问题。最好用 coretext 或者 textkit 来显示富文本吧
EggmanQ
2015-10-14 13:18:16 +08:00
@kenshinhu 对的~
WildCat
2015-10-16 22:33:02 +08:00
@onevcat 这两天闲暇的时候一直在思考您说的。
但是 Text 和 Image 混排如何解决?

UITextView 没有看到与异步加载 NSTextAttachment 相关的 method 。

我目前的想法是,
解析 HTML ,纯文字直接放 UITextView ,遇到 Image 再添加个 UIImage ?
把 UITextView 和 UIImage 放在一个 View Container 里?
onevcat
2015-10-16 23:35:47 +08:00
@WildCat 确实不容易做异步,如果有异步设置图片的需求的话是比较蛋疼...如果内容不多或者图片尺寸固定的话就怎么玩儿都可以了,否则的话还要再想办法。还是要具体情况具体分析,要是需求的排版再变态一点,比如各种 css 控制,那就很难有一个好的解法。

其实在 cell 里直接显示可以各种变化的 web 的内容这种事情,本身就不是 cell 的设计意图,所以这样的需求在这里用 cell 来实现其实就是反模式的,自然也不会有特别成熟可以套用的方法。

琢磨一下把要显示的内容解析并且建立一个好的 model ,然后复用地用 cell 来用比较统一的方式显示,可能会是比较 iOS 的解决方式。要是原来的 web 内容就非常复杂并且一定要原封不动地实现的话,那干脆整个直接上个 webview 会更好吧。

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

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

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

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

© 2021 V2EX