【问题标题】:How to update the tableViewCell height after fetching the image?获取图像后如何更新 tableViewCell 高度?
【发布时间】:2020-11-01 10:23:39
【问题描述】:

免责声明:StackOverflow 上有多个关于此的答案,但似乎都没有解决问题(如果我错过了一些答案,请告诉我)。

我有一个表格视图,其中有一个包含三个元素的 tableView 单元格:

  • 标题
  • 字幕
  • 图像视图

所有都是动态的(从服务器接收)唯一的问题是所有图像的高度不同。

添加了一个根据图像高度更新图像视图高度约束的逻辑,这是使用的逻辑。 我在 UITableViewCell 中添加了这段代码

let ratio = image.size.width / image.size.height
let newHeight = imageView.frame.width / ratio
imageViewHeightConstraint.constant = newHeight
layoutIfNeeded()

虽然它有时会调整图像大小,但它会显示单元格的不正确高度(下图)。 有时 imageView 的高度会增加而图像仍然很小(AspectFit)

我在 prepareForReuse 中将 imageView.image 设置为 nil。

请告诉我出了什么问题?

【问题讨论】:

    标签: ios swift uitableview uiimageview


    【解决方案1】:

    一个想法是从服务器预取图像的大小 - 将其大小作为数字返回并在 UITableView 中为其预分配空间。

    否则,您必须重新加载将在从服务器加载图像后加载图像的每个单元格,这将强制重新计算整个 UITableView 的整个布局 - 这是非常繁重的操作。尤其是假设您将加载多张图片,为每张图片重新计算布局会极大地影响您的应用程序的性能。

    UITableView 的工作方式是它在开始时预先计算每个单元格的位置(x,y 坐标) - 每个单元格的位置取决于先前单元格的位置和大小。然后它保持缓存并用于优化滚动和重用其中元素的速度。 如果您为顶部的第一个单元格加载图像-它将影响其下方的所有其他单元格-并且必须重新计算它。在您的情况下,每个加载的图像都会发生这种情况。

    【讨论】:

    • 是的,实际上这是我心中的最后一件事,但因为它涉及到服务器端来计算图像高度并发送它,所以想得到其他人的意见和意见。
    猜你喜欢
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多