这是一个非常罕见的来自地狱的错误,
我有一个显示产品的无限滚动控制器,每行2个。很少有东西影响控制器并导致物品消失,当我点击项目所在的空白区域时,它按预期工作并将用户引导到物品细节控制器。当我退回到列表时,有时单元格会显示其内容,而其他单元则会被隐藏。
有时它只缺少几个项目,有时会有很多缺少的项目使列表显示为空,例如每个屏幕高度只能看到1或2个单元格。
更奇怪的情况是,当我快速滚动到最后并将屏幕拉伸到可见区域之外时,并且没有更多项目需要加载,可见项目可以从左向右跳跃。
请看这两个视频。
https://www.dropbox.com/s/jibflcouz1ena8n/missingProductImages.mov?dl=0 https://www.dropbox.com/s/uz13fzorypnp38t/again.mov?dl=0
我可以发送代码,但我不想用完整长度的代码弄乱这个地方,如果你想查看代码的特定部分,请告诉我。也许有人可以通过查看视频来了解可能发生的事情。
答案 0 :(得分:0)
这里可能发生的事情是您的集合视图单元格的状态问题。将模型值分配给单元格视图的代码将在此处使用。但是没有任何实际信息,首先要审查的是小区的prepareForReuse
实施:
接下来,检查单元格的init
/ initWithCoder
方法中是否有任何基本配置 - 这些只在首次创建时调用,而不是在重用时调用。
这些是UICollectionView单元处理的常见缺陷。如果他们没有提出问题,请发布手机密码。
答案 1 :(得分:0)
看起来您的单元格没有被正确重用。
您是否可以检查是否已在Interface Builder中为您的代码中的单元格设置了相同的reuseIdentifier?
更新:附加图片以显示在storyboard / xib中设置标识符的位置
更新:添加了布局解决方案
另一个问题可能是由于collectionViewCell的布局范围。加载单元格时,在将它们添加到collectionView并进行渲染之前,不会计算它们的边界。这可能导致单元格中的元素使用错误的值进行布局。这种情况通常发生在异步图像框架中,因为它们会缓存调整大小的图像版本以提高性能。单元格加载时,缓存的图像加载错误的大小。
将以下代码添加到collectionViewCell:
- (void)setBounds:(CGRect)bounds {
[super setBounds:bounds];
self.contentView.frame = bounds;
[self setHighlighted:NO];
}