回收时不会重新布局自定义 iOS UITableViewCells

Posted

技术标签:

【中文标题】回收时不会重新布局自定义 iOS UITableViewCells【英文标题】:Custom iOS UITableViewCells not being re-laid out when recycled 【发布时间】:2012-08-17 17:51:14 【问题描述】:

我有一个 UITableView,它显示来自各种社交网络的更新帖子。我有自定义的 UITableViewCell 子类,里面有一个自定义的 UIView,它负责绘制所有的标签和图像,类似于苹果在这里描述的:http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW18

在这个视图的 -layoutSubviews 调用中,我找到了各种标签所需的大小,并相应地设置了它们的框架。然而,在滚动一点之后,很明显,当一个单元格被回收时,-layoutSubviews 没有被调用,导致一些单元格的标签框没有设置足够大来显示它们的内容。当将我的数据对象通过单元格传递到自定义视图时,我调用 [self setNeedsDisplay],我相信这会导致单元格调用 -layoutSubviews。

我怎样才能最好地确保标签的大小适合发送给他们的内容?

【问题讨论】:

【参考方案1】:

如果你想强制布局,发送setNeedsLayout(不是setNeedsDisplay)到视图。听起来您需要在您的tableView:cellForRowAtIndexPath: 中发送[cell setNeedsLayout],然后才能返回单元格。

【讨论】:

愚蠢的问题:[cell setNeedsLayout] 会导致所有子视图自行布局吗? 我认为这取决于superview是否改变了subview的大小。我相信只有当视图的大小发生变化、添加到窗口、获得或失去子视图时,视图才会自动标记为布局。

以上是关于回收时不会重新布局自定义 iOS UITableViewCells的主要内容,如果未能解决你的问题,请参考以下文章

自定义 CollectionView 布局重新加载数据不起作用

防止适配器在滚动时回收视图(编辑永远不会这样做。)

自定义 TableViewCells 在重新加载 tableview 时闪烁

如何自定义pickerView的高度和宽度

自动布局:updateConstraints 不会在方向更改时得到调用

在用户选择/在 ios swift 中突出显示时动态删除自定义 UIView