下载异步图像并调整图像高度后如何更新tableview单元格

时间:2018-09-12 16:15:53

标签: ios swift uitableview

使用 Kingfisher setImage with completion handler方法从服务器下载图像后,如何更新像元高度?下载图像后,我使用以下命令调整其高度约束的大小:cell.imageHeight.constant = image.size.height * cell.frame.size.width / image.size.width

已下载图像并使用cellForRow方法进行设置,但我也尝试在willDisplayCell中进行了同样的操作。我还检查了setImage方法的完成处理程序中的cell.tag == indexPath.row

我已经尝试了以下方法,但都无效:

  • heightForRowUITableViewAutomaticDimension,而estimatedHeightForRowAt是某个值(可能的最大单元格),以及这2个的所有其他组合
  • tableview开始/结束更新
  • reloadRows在indexPath
  • cell.setNeedsLayoutlayoutIfNeededlayoutSubviews
  • dispatch main async

它们中的任何一个都遇到相同的问题:滚动表跳动,第一次显示时单元格高度不正确并进行更新,我必须上下滚动以隐藏和显示该单元格,某些单元格的tableview计算出的高度错误

如果我滚动到顶部,一切都很好,因为所有图像已经在缓存中。

每个人如何做到这一点? Facebook或instagram如何做到这一点?从任何API获取单元格高度后如何更新?

1 个答案:

答案 0 :(得分:0)

您是否尝试过将以下内容添加到viewDidLoad:

    @JsonTypeInfo(
            use = JsonTypeInfo.Id.NAME,
            include = JsonTypeInfo.As.PROPERTY,
            property = "investmentType")
    @JsonTypeIdResolver(InvestmentResolver.class)
    public abstract class Investment {
    } 

然后,无论您在哪里填充其他元素,您当然都需要调整这些元素的约束和高度。

我建议对单元进行子分类,并为要为其填充数据的单元创建一个set方法。这样,您可以调整单元格中元素的约束以更好地处理填充单元格中的数据。