回收时不会重新布局自定义 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 时闪烁