如何在具有自动布局的 UITableView 上 prepareForReuse?
How to prepareForReuse on a UITableView with auto-layout?
我有一个 UITableView,其中包含使用自动布局的自动尺寸单元格。此外,单元格的所有子视图都使用自动布局(编程约束)。
由于这些单元格及其相应的子视图具有独特的不同大小,因此当它们被重复使用时,单元格和子视图的约束似乎并没有失效和重置,这导致以下结果:
问题说明:
我已经在 prepareForReuse 函数中尝试了各种方法,但我无法重置所有约束。 如何实现?
我试过的东西:
override func prepareForReuse() {
super.prepareForReuse()
invalidateIntrinsicContentSize()
removeConstraints(constraints)
subviews.forEach( { [=10=].removeConstraints([=10=].constraints); [=10=].invalidateIntrinsicContentSize() })
setNeedsUpdateConstraints()
}
这种情况就是为什么有多个重用桶的原因。为每个 type 单元格使用不同的单元格子类/重用字符串。这样,就没有什么可做的了:只需设置一次单元格,让自动布局负责调整大小,例如,当文本不同或(对于图像单元格)图像不同时。
我建议不要删除所有约束并在准备好重用单元时重建它们。相反,我会为您的约束添加出口,然后更新它们的常量以更改它们的 sizing/spacing,或者将它们分成不同的用例集合并使用 activate(_:)
和 deactivate(_:)
转向不同的约束集 on/off。 (或者调整常量和打开和关闭一些约束的组合。
使用不同的标识符设置不同类型的单元格也可能更简单,并且只需在创建这些单元格时对每种类型设置约束即可。事实上,我会把它作为我的第一选择。
我有一个 UITableView,其中包含使用自动布局的自动尺寸单元格。此外,单元格的所有子视图都使用自动布局(编程约束)。
由于这些单元格及其相应的子视图具有独特的不同大小,因此当它们被重复使用时,单元格和子视图的约束似乎并没有失效和重置,这导致以下结果:
问题说明:
我已经在 prepareForReuse 函数中尝试了各种方法,但我无法重置所有约束。 如何实现?
我试过的东西:
override func prepareForReuse() {
super.prepareForReuse()
invalidateIntrinsicContentSize()
removeConstraints(constraints)
subviews.forEach( { [=10=].removeConstraints([=10=].constraints); [=10=].invalidateIntrinsicContentSize() })
setNeedsUpdateConstraints()
}
这种情况就是为什么有多个重用桶的原因。为每个 type 单元格使用不同的单元格子类/重用字符串。这样,就没有什么可做的了:只需设置一次单元格,让自动布局负责调整大小,例如,当文本不同或(对于图像单元格)图像不同时。
我建议不要删除所有约束并在准备好重用单元时重建它们。相反,我会为您的约束添加出口,然后更新它们的常量以更改它们的 sizing/spacing,或者将它们分成不同的用例集合并使用 activate(_:)
和 deactivate(_:)
转向不同的约束集 on/off。 (或者调整常量和打开和关闭一些约束的组合。
使用不同的标识符设置不同类型的单元格也可能更简单,并且只需在创建这些单元格时对每种类型设置约束即可。事实上,我会把它作为我的第一选择。