使用AutoLayout在UITableViewCell中的动态图像高度

时间:2016-11-23 19:34:12

标签: ios uitableview uiimageview ios-autolayout

我有一个UITableViewCell,其中多个数据被组织成垂直堆栈布局。其中一些是垂直动态的,一个是UILabel,另一个是UIImageView。

UIImageView是我遇到的麻烦。我在UITableViewCell中使用插座设置了高度约束。图像加载异步,因此UITableViewCell行的高度将是错误的,并且我们只知道加载图像后行的真实高度。当我在加载图像后将约束设置为更新为适当的宽高比时,我的UITableView完全不可靠,图像在整个地方跳跃并且格式化效果不佳。

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

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

我尝试过调用setNeedsLayout,setNeedsUpdateConstraints,updateConstraintsIfNeeded等......它们似乎都没有用。

有什么建议吗?

詹姆斯

1 个答案:

答案 0 :(得分:2)

如果您需要根据图像大小预测单元格高度,则是,如果要使用动态动画和可接受的滚动性能设置平滑布局,则应预先检查图像。

例如,Pinterest在API响应中返回所请求Pin的图像大小,因为他们希望您在图像异步获取之前设置布局,实际上,他们在自己的iOS应用程序中执行相同的操作(您可以探索他们的API {{ 3}})。 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

第二个选项,使用"伪动态高度"。主要思想是,您的单元格高度始终是可预测和预先计算的,但单元格内的图像具有动态大小。我最近在这里找到的这种解决方案的最佳解释 - here