我有一个UITableView的单元格自动尺寸使用自动布局.此外,单元格的所有子视图都使用自动布局(编程约束)。
由于这些单元格及其相应的子视图具有独特的不同大小,因此当它们被重用时,单元格和子视图的约束似乎不会失效和重置,这将导致以下结果:
问题的证明:
我在prepareForReuse函数中尝试过各种各样的东西,但是我没有能够重置所有约束。如何实现这一点?
我试过的东西:
override func prepareForReuse() {
super.prepareForReuse()
invalidateIntrinsicContentSize()
removeConstraints(constraints)
subviews.forEach( { $0.removeConstraints($0.constraints); $0.invalidateIntrinsicContentSize() })
setNeedsUpdateConstraints()
}发布于 2021-05-06 19:50:23
这种情况就是存在多个重用桶的原因。对每种单元格类型使用不同的单元格子类/重用字符串。这样,就没有什么可做的了:只需设置单元格一次,并让自动收费表负责调整大小,例如,当文本不同或(对于图像单元格)图像不同时。
发布于 2021-05-06 19:51:15
在准备重用单元时,我建议不要删除所有约束并重新构建它们。相反,我会向约束添加出口,然后更新它们的常量以更改大小/间距,或者将它们划分为针对不同用例的集合,并使用activate(_:)和deactivate(_:)打开/关闭不同的约束集。(或调整常量和打开或关闭某些约束的组合。
如果使用不同的标识符设置不同类型的单元格,并且在创建这些单元格时只设置对每种类型的约束,也可能更简单。事实上这是我的第一选择。
https://stackoverflow.com/questions/67423825
复制相似问题