【问题标题】:Where is UITableViewCell being put back to queue?UITableViewCell 在哪里被放回队列?
【发布时间】:2023-03-07 04:01:01
【问题描述】:

我目前正在更新一个不是我自己制作的应用程序。

其中有一个高度自定义的表格视图,用于水平滚动图像,同时显示 3 张图像并启用分页。

问题是有时它们看起来是白色的,我认为这是因为它们是由dequeueReusableCell 返回的,而它们仍然可见。 (所以表格视图正在重用单元格,因为它仍然可见,所以不应该被重用。)

由于该表中通常没有太多单元格,因此我尝试了一种解决方法,即 alloc 和 init 每次都是一个新单元格,而不是将旧单元格出列,到目前为止它工作正常(对于一个小表)。

但是,这不是一个好的解决方案,我想以“正确”的方式来做。

我不知道是否应该将单元格放回队列。

我应该怎么做才能阻止单元格排队等待重用?

【问题讨论】:

  • 您的表格视图是否旋转了 90 度以允许水平滚动?
  • 是的。我正在使用这个github.com/alekseyn/EasyTableView
  • 你是说它们出现在屏幕上时是白色的,还是它们出现在屏幕上带有图像然后在屏幕上时变白?
  • 两者都会发生。另外,当我左右移动一段时间时,移动到另一个视图控制器并返回等一切都可以。

标签: iphone ios objective-c uitableview


【解决方案1】:

如果您真的不希望单元格被重复使用,请按照您已经做过的方式进行。不建议不重用UITableViewCells。重用技术可以节省内存。

但是当你的 tableView 不是很消耗内存时,就这样做吧。这是不“禁用”重用的方式。

听起来好像是因为tableView旋转了90°来实现水平滚动。所以 iOS 认为滚动出x 像素的单元格必须位于屏幕外并且可以重复使用。这是我的推测。

当您的更新针对 iOS 6.0 及更高版本时,我建议切换到 UICollectionView,它与 UITableView 非常相似,但具有完全自定义流布局的能力(这是您在谷歌上搜索的术语)。

当我的假设正确时,另一个可能的解决方案可能是使用两个可重复使用的 ID 并交替使用它们,以便单元格有足够的“空间”来滚动:

if([indexPath row] % 2 == 0) {
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierOne];
}
else {
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierTwo];
}

但如果我的猜测是正确的,我现在真的不知道 :)

【讨论】:

  • 我必须支持 iOS 5。:( 我现在还发现表格更大的情况,当我足够快地滚动它时,所有 3 张图像都会变成白色。
  • 真的吗? [此版本分布图][1] 来自 [Apple 开发人员资源][2] 可以帮助您说服您的客户,以便您可以迁移到 iOS 6 :) [1]:devimages.apple.com.edgekey.net/devcenter/ios/checklist/images/… [2]:developer.apple.com/devcenter/ios/checklist跨度>
  • 但是您的评论听起来图像加载速度不够快。它们是从 webServer 加载的吗?
  • 是的,它们是从服务器下载的。但是我已经加载了它们,即当我开始滚动时,我的 3 张图像中的中间一张消失了(变成白色),即使它在一秒钟前就在那里并且它仍然在屏幕上完全可见。
  • 只需在您的项目中使用 PSTCollectionview 开源库,以便在 ios5 上支持 Collectionviews。它会根据客户端 ios 版本自动切换到本机集合视图。所有 api 都与原始 uicollectionview 兼容 %100。相当成熟和完美。 github.com/steipete/PSTCollectionView
猜你喜欢
  • 2014-03-16
  • 1970-01-01
  • 2010-11-09
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
相关资源
最近更新 更多