带有AutoLayout的UITableViewCell中的动态图像高度

问题描述:

我有一个UITableViewCell,其中有多个数据组成垂直堆栈布局。其中一些是垂直动态的,一个是UILabel,另一个是UIImageView。带有AutoLayout的UITableViewCell中的动态图像高度

UIImageView是我遇到的麻烦。我在UITableViewCell中设置了一个插口的高度约束。图像加载异步,所以UITableViewCell行的高度将是错误的,我们只知道图像加载后行的真正高度。当我设置约束后更新到适当的宽高比图像加载后,我的UITableView变得完全不可靠,图像跳跃到整个地方和格式不能很好地工作。

我遇到了*中的另一篇文章,提到您应该预先检查图像,获取它们的宽度和高度,以便我们可以确定并在图像加载之前设置约束。这确实允许平滑滚动。

我的问题是:这是唯一的方法吗?是否有更好的技术使用动态图像尺寸的AutoLayout?他们会是什么?

我试着调用setNeedsLayout,setNeedsUpdateConstraints,updateConstraintsIfNeeded等等......他们都没有工作。

有什么建议吗?

詹姆斯

如果您需要基于图像大小来预测你的高度,那么,你应该,如果你想设置布局流畅动态的动画和可接受的滚动性能预先检查图像。

例如,Pinterest在API响应中返回请求Pin的图像大小,因为他们希望您在图像获取异步之前设置布局,实际上,他们在自己的iOS应用程序中执行相同的操作(您可以探索其API here )。 Pinterest API响应以及关于图像的扩展信息的示例:

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 

第二个选项,使用“伪动态高度”。主要思想,你的单元高度总是可以预测和预先计算的,但单元格内的图像具有动态大小。对于我最近在这里缝制的这种解决方案最好的解释是 - Self-sizing Table View Cells

+1

感谢您的输入!我已经在iOS和Android上预先检索了图像的大小。似乎在平滑滚动方面运行良好。 –

+0

@JamesScott,不客气! – dive