iOS 无限滚动项目消失(有时)

iOS infinite scroll items disapearing (sometimes)

这是一个非常罕见的 bug,

我有一个显示产品的无限滚动控制器,每行 2 个。很少,某些东西会影响控制器并导致项目消失,当我点击项目应该所在的空白区域时,它会按预期工作并将用户定向到项目详细信息控制器。当我返回列表时,有时单元格会显示其内容,而其他单元格会被隐藏。

有时只是缺少几个项目,有时缺少的项目太多导致列表显示为空,例如每个屏幕高度只有 1 或 2 个单元格可见。

一个更奇怪的情况是,当我非常快地滚动到最后并非常快地将屏幕拉伸到可见区域之外,并且没有更多的项目要加载时,可见项目可以从左跳到右。

请看这两个视频。

https://www.dropbox.com/s/jibflcouz1ena8n/missingProductImages.mov?dl=0 https://www.dropbox.com/s/uz13fzorypnp38t/again.mov?dl=0

我可以发送代码,但我不想用完整的代码把这个地方弄得乱七八糟,如果您想查看代码的特定部分,请告诉我。也许有人可以通过查看视频了解可能发生的事情。

这里可能发生的是您的集合视图单元格的状态问题。将模型值分配给单元格视图的代码将在这里使用。但是缺少任何实际信息,首先要审查的是单元格的 prepareForReuse 实现:

  • 它叫super吗?
  • 是否清除所有当前值?
  • 它是否取消任何挂起的异步操作?
  • 提取和取消是否正确匹配?

接下来,检查单元格的 init/initWithCoder 方法中是否有任何基本配置——这些方法仅在首次创建时调用,在重用时不会调用。

这些是 UICollectionView 单元格处理的常见缺陷。如果他们没有提出问题,请 post 手机代码。

您的细胞似乎没有被正确重复使用。

您能否检查一下您在 Interface Builder 中为单元格设置的 reuseIdentifier 是否与您在代码中分配的重用标识符相同?

更新:附上图片以显示在 storyboard/xib

中设置标识符的位置

更新:添加布局解决方案

另一个问题可能是由于您的 collectionViewCell 的布局边界造成的。当您加载单元格时,在将它们添加到您的 collectionView 并呈现之前,不会计算它们的边界。这可能会导致单元格中的元素使用错误的值进行布局。这通常发生在异步图像框架中,因为它们会缓存图像的调整大小版本以提高性能。当您加载单元格时,缓存的图像以错误的大小加载。

将以下代码添加到您的 collectionViewCell:

- (void)setBounds:(CGRect)bounds {
    [super setBounds:bounds];
    self.contentView.frame = bounds;
    [self setHighlighted:NO];
}