【问题标题】:Cell is being overzealously reused细胞被过度重用
【发布时间】:2016-02-08 14:59:34
【问题描述】:

我有一个 UICollectionViewController 和一些单元格 (UICollectionViewCell)。我想在某些单元格上绘制图像。这工作正常,但是当我滚动时,一些单元格似乎被不必要地重复使用,换句话说,我没有明确绘制的单元格正在被绘制(仅在滚动之后)。

在我的牢房中,我执行以下操作:

imageView = UIImageView(frame: CGRectMake((self.bounds.size.width/4)-1, (self.bounds.size.height/4)-1, 30, 30));
imageView!.image = imageTick
self.addSubview(self.lblDay)
self.addSubview(imageView!)

我创建一个图像视图并设置它的图像,然后添加标签和图像视图。

有人看到我做错了吗?

这里的完整性是我如何初始化单元格的图像:

let imageTick:UIImage = UIImage(named: "star")!
var imageView:UIImageView? = nil

【问题讨论】:

    标签: ios swift uitableview uiimageview


    【解决方案1】:

    UICollectionViewCells 被系统重用,因此您需要通过清除单元格中的所有内容(将图像设置为 nil 等)来处理 UICollectionViewCell 中的 prepareForReuse 方法中单元格被重用的可能性。 )

    Here is the doc for UICollectionReusableView that declares that

    Here is the doc for UICollectionView 您可以在该文档中看到,对于 dequeueReusableCellWithReuseIdentifier:forIndexPath: 方法,如果有可用的单元格可重复使用,它会调用 prepareForReuse

    【讨论】:

    • 非常好的提示。我将图像归零,并且它不会随意出现在不需要的地方。但现在我需要重新渲染图像。当它被选中时,我在单元格中设置了一个布尔值,但我可能也应该在 prepareForReuse 中重置它。无论如何,我不确定何时可以重绘图像。
    • @dasPing 您可以在 dequeueReusableCellWithReuseIdentifier 实现中为您的单元格设置正确的图像
    • @dasPing stackoverflow.com/questions/19269266/… 也看一下,它建议不要为您的图像视图使用 addsubview
    猜你喜欢
    • 1970-01-01
    • 2021-01-13
    • 2019-08-09
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多