• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UITableViewCell 在出队时重绘

[复制链接]
菜鸟教程小白 发表于 2022-12-12 15:09:40 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的设置

我有一个 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap