OGeek|极客世界-中国程序员成长平台

标题: ios - UITableViewCell 在出队时重绘 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 15:09
标题: ios - UITableViewCell 在出队时重绘

我的设置

我有一个 UITableViewCell,它位于我的主 Storyboard 的 UITableViewController 中。它填充了一些从 REST API 中提取的 JSON 数据,这将导致每个单元格的高度可变。有 UIImageViewsUILabels 所有不同的高度和样式,想想 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-推荐答案


@rdelmar 的评论是正确的。你不应该做你正在做的事。可能有效,但这是一种糟糕的形式,你不想养成坏习惯。

首先,利用面向对象的编程。单元格应该能够根据您要求它显示的数据进行 self 配置。表格 View 不应该设计单元格。

UITableViewCells 需要针对速度进行优化。创建和添加 subview 是一个缓慢的过程。一次就可以了,但是单元格将被重用(系统优化),您应该只重用第一次创建单元格时添加的现有 View 。

例如,您可以隐藏不需要的 subview 。您可能希望在 -prepareForReuse 中执行此操作。您可以在 -layoutSubviews 中移动它们。或者在-updateConstraints中改变 subview 的位置。

通常您只想将要显示的数据从数据源(通常是 View Controller )传递给表格 View 单元子类。让单元格完成显示工作。

关于ios - UITableViewCell 在出队时重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30067353/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4