我的设置
我有一个 UITableViewCell ,它位于我的主 Storyboard 的 UITableViewController 中。它填充了一些从 REST API 中提取的 JSON 数据,这将导致每个单元格的高度可变。有 UIImageViews 、UILabels 所有不同的高度和样式,想想 Instagram 风格。
我的问题
当我滚动到第 5 或第 6 个单元格,然后返回时,它们开始重绘和重叠,因此文本会混合,线条会重绘,等等。
我的尝试
这似乎是 SO 上的一个常见问题,所以我尝试了几个已发布的解决方案。似乎我的问题可能与其他人面临的问题相同,也就是说,每次出队时我都会在我的单元格上调用 addSubview ,但我尝试检查该单元格是否已经存在。我在某个地方遇到了另一个帖子(对不起,我不记得在哪里),这表明因为我在 Storyboard 中创建了它,所以它已经初始化并且 if ( !cell ) 已经返回 false ,所以我不知道如何防止它重绘。
当我尝试从 Storyboard 中删除单元格并以编程方式创建它时,我收到一条错误消息,提示它找不到具有我的标识符 @"Cell" 的单元格。
我也尝试过有人在出队时删除所有 subview 的解决方案,所以我使用了:
for ( UIView *view in cell.contentView.subviews ) {
if ([view isKindOfClass:[UIView class]]) {
[view removeFromSuperview];
}
}
它什么也没找到。
Best Answer-推荐答案 strong>
@rdelmar 的评论是正确的。你不应该做你正在做的事。可能有效,但这是一种糟糕的形式,你不想养成坏习惯。
首先,利用面向对象的编程。单元格应该能够根据您要求它显示的数据进行 self 配置。表格 View 不应该设计单元格。
UITableViewCells 需要针对速度进行优化。创建和添加 subview 是一个缓慢的过程。一次就可以了,但是单元格将被重用(系统优化),您应该只重用第一次创建单元格时添加的现有 View 。
例如,您可以隐藏不需要的 subview 。您可能希望在 -prepareForReuse 中执行此操作。您可以在 -layoutSubviews 中移动它们。或者在-updateConstraints中改变 subview 的位置。
通常您只想将要显示的数据从数据源(通常是 View Controller )传递给表格 View 单元子类。让单元格完成显示工作。
关于ios - UITableViewCell 在出队时重绘,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/30067353/
|