Dynamic image heights in UITableViewCell with AutoLayout
我有一个 UITableViewCell,其中包含多个组织成垂直堆栈布局的数据。其中一些是垂直动态的,一个是 UILabel,一个是 UIImageView。
UIImageView 是我遇到的问题。我在 UITableViewCell 中设置了一个带有出口的高度约束。图像加载异步,因此 UITableViewCell 行的高度将是错误的,我们只有在加载图像后才知道行的真实高度。当我将约束设置为在图像加载后更新为适当的纵横比时,我的 UITableView 变得完全不可靠,图像到处跳跃并且格式根本无法正常工作。
我在 StackOverflow 中看到另一篇文章,其中提到您应该预先检查图像,获取它们的宽度和高度,以便我们可以在加载图像之前确定并设置约束。这确实允许平滑滚动。
我的问题是:这是唯一的方法吗?是否有更好的技术来使用具有动态图像大小的 AutoLayout?它们会是什么?
我试过调用 setNeedsLayout、setNeedsUpdateConstraints、updateConstraintsIfNeeded 等......它们似乎都不起作用。
有什么建议吗?
詹姆斯
如果您需要根据图像大小预测单元格高度,那么是的,如果您想设置具有动态动画和可接受的滚动性能的平滑布局,您应该预先检查图像。
例如,Pinterest 在 API 响应中为请求的 Pin 返回图像大小,因为他们希望您在异步获取图像之前设置布局,实际上,他们在自己的 iOS 应用程序中做同样的事情(您可以在这里探索他们的 API) .带有图像扩展信息的 Pinterest API 响应示例:
1 2 3 4 5 6 7 8 9 | root:{} 1 item data:{} 5 items note:A hardened leather thimble to make stitching leather easier! url:https://www.pinterest.com/pin/310959549256036760/ image:{} 1 item original:{} 3 items url:https://s-media-cache-ak0.pinimg.com/originals/b2/19/ec/b219ec9b8418233c651de9d17bd00e4a.jpg width:640 height:640 |
第二个选项,使用"伪动态高度"。主要思想是,您的单元格高度始终是可预测和预先计算的,但是单元格内的图像具有动态大小。我最近在这里缝制的这种解决方案的最佳解释 - 调整表格视图单元格。