首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在具有自动布局的prepareForReuse上运行UITableView?

如何在具有自动布局的prepareForReuse上运行UITableView?
EN

Stack Overflow用户
提问于 2021-05-06 18:13:49
回答 2查看 311关注 0票数 2

我有一个UITableView的单元格自动尺寸使用自动布局.此外,单元格的所有子视图都使用自动布局(编程约束)。

由于这些单元格及其相应的子视图具有独特的不同大小,因此当它们被重用时,单元格和子视图的约束似乎不会失效和重置,这将导致以下结果:

问题的证明:

不重复使用 再利用

我在prepareForReuse函数中尝试过各种各样的东西,但是我没有能够重置所有约束。如何实现这一点?

我试过的东西:

代码语言:javascript
复制
override func prepareForReuse() {
    super.prepareForReuse()
    
    invalidateIntrinsicContentSize()
    removeConstraints(constraints)
    subviews.forEach( { $0.removeConstraints($0.constraints); $0.invalidateIntrinsicContentSize()  })
    
    
    setNeedsUpdateConstraints()
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-06 19:50:23

这种情况就是存在多个重用桶的原因。对每种单元格类型使用不同的单元格子类/重用字符串。这样,就没有什么可做的了:只需设置单元格一次,并让自动收费表负责调整大小,例如,当文本不同或(对于图像单元格)图像不同时。

票数 0
EN

Stack Overflow用户

发布于 2021-05-06 19:51:15

在准备重用单元时,我建议不要删除所有约束并重新构建它们。相反,我会向约束添加出口,然后更新它们的常量以更改大小/间距,或者将它们划分为针对不同用例的集合,并使用activate(_:)deactivate(_:)打开/关闭不同的约束集。(或调整常量和打开或关闭某些约束的组合。

如果使用不同的标识符设置不同类型的单元格,并且在创建这些单元格时只设置对每种类型的约束,也可能更简单。事实上这是我的第一选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67423825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档