我有点沮丧。我有一个带有UITableView
单元格的iOS 10项目UITableViewAutomaticDimension
。我正确设置了约束。
最初我将我的细胞映射到
中 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
并且一切正常,但后来我读了一篇文章:https://medium.com/ios-os-x-development/perfect-smooth-scrolling-in-uitableviews-fd609d5275a5#.4rnbc4vyg并将我的数据映射移到了
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
此后我的自动布局单元停止正常工作。
我的理解是,在cellForRowAt
之后但在willDisplay
之前计算高度,所以当我在willDisplay
高度的映射已经为我的单元格设置并且我需要重新加载再次(这不好)。
任何人都可以证明/解释这个吗?
更新
发布问题后,我发现了这篇文章:https://tech.zalando.com/blog/proper-use-of-cellforrowatindexpath-and-willdisplaycell/
答案 0 :(得分:4)
始终在func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
Apple文档说明 cellForRowAt :
另一方面的要求单元格的数据源插入表视图的特定位置。
willDisplay 可用于在绘制视图之前覆盖单元格的某些属性。我建议如果你不确定willDisplay只是在cellForRowAt中做你所有的设置。
Apple的doc说有关willDisplay:
此方法为委托提供了覆盖表视图前面设置的基于状态的属性的机会,例如选择和背景颜色。
更多关于willDisplay在Apple的文档中: tableView:willDisplayCell:forRowAtIndexPath:
编辑:在阅读了您提供的链接后 - 我重申除非您确实有特定理由在 willDisplayCell 中设置您的单元格,否则只需在中执行此操作即可cellForRowAt 即可。