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

时间:2016-04-18 18:35:20

标签: ios scroll infinite

这是一个非常罕见的来自地狱的错误,

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

有时它只缺少几个项目,有时会有很多缺少的项目使列表显示为空,例如每个屏幕高度只能看到1或2个单元格。

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

请看这两个视频。

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

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

2 个答案:

答案 0 :(得分:0)

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

  • 是否称为超级?
  • 是否清除所有当前值?
  • 是否取消任何待处理的异步操作?
  • 提取和取消是否正确匹配?

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

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

答案 1 :(得分:0)

看起来您的单元格没有被正确重用。

您是否可以检查是否已在Interface Builder中为您的代码中的单元格设置了相同的reuseIdentifier?

更新:附加图片以显示在storyboard / xib中设置标识符的位置

Select your cell and enter the collection reusable view identifier

更新:添加了布局解决方案

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

将以下代码添加到collectionViewCell:

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