gpt4 book ai didi

ios - UITableViewCell 在出队时重绘

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:13 25 4
gpt4 key购买 nike

我的设置

我有一个 UITableViewCell,它位于我的 UITableViewController 主 Storyboard中。它填充了一些从 REST API 中提取的 JSON 数据,这将导致每个单元格的高度可变。有 UIImageViewsUILabels 所有不同的高度和样式,想想 Instagram-esque。

我的问题

当我滚动到第 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];
}
}

它没有找到任何东西。

最佳答案

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

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

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

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

通常,您只想将要显示的数据从数据源(通常是 View Controller )传递到 TableView 单元格子类。让细胞做显示工作。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com