UITableViewCell布局不更新,直到单元格被重用

问题描述:

我有一个UITableView,我填充自动调整单元格。 UITableView设置是相当简单:UITableViewCell布局不更新,直到单元格被重用

tableView.estimatedRowHeight = 70 
    tableView.rowHeight = UITableViewAutomaticDimension 

酷似苹果建议在这里:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithSelf-SizingTableViewCells.html

要启用自调整大小表视图细胞,必须设置表视图的 rowHeight属性来UITableViewAutomaticDimension。您还必须 将值分配给estimatedRowHeight属性。一旦 这两个属性被设置,系统就会使用自动布局来计算 行的实际高度。

配置单元格时,我还禁用/启用了一些约束条件来实现所需的外观。这就是事情变得有趣的地方。单元格布局不会更新,直到单元格被重用。从字面上看。您可以拨打layoutIfNeeded()setNeedsLayout(),layoutSubviews()或任何其他方法,您不会强制单元格更新其布局。

其他各方面的工作还不错:标签不改变自己的文字,隐藏/取消隐藏的意见,但直到电池被重用布局被卡住。

问题:是什么原因造成的,以及如何避免这种行为?

对我来说,这个问题是由estimatedRowHeight引起的。

只需删除该行

tableView.estimatedRowHeight = 70 

固定我的问题。单元格正确地更新了它的布局,它几乎解决了我的问题

但是,最有可能的,你会得到另一个麻烦,你的细胞的高度被设定为43.5点。您登录也将充满了自动布局错误,这将包括这样

<NSLayoutConstraint:0x600000097570 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fd4ee511d20.height == 43.5 (active)> 

显然,一条线,如果你不提供estimatedRowHeight,表视图把你的单元格的内容视图中的43.5点高度约束,并如果你的单元格的“内部”高度不匹配(并且它的概率是99.99%),那么它将把错误记录在日志中。

如何避免该错误?我还不知道。 我发布了一个关于该问题的问题,只要我找到答案,我会在这个问题中提供一个链接。