UICollectionViewCell的SelectedBackgroundView在不应该是可见的时候可见

时间:2014-11-10 08:52:26

标签: ios swift uicollectionview uicollectionviewcell uiviewanimation

我有一个UICollectionView。内部有一些细胞,背景为白色。我已将selectedBackgroundView设置为基本的紫色视图。

我的CollectionView有一个高度为0的约束,当我按下一个按钮时,我将约束更新为80.当我这样做时,在动画中我可以看到屏幕上的紫色背景,直到结束关于动画,我无法理解为什么或如何防止这种情况? 其他一切工作正常,它只是一个视觉效果"错误。 关于如何解决这个问题的任何建议?

在动画中你可以看到紫色出现的bug的Gif Visual bug

如果它有任何帮助,这是我的细胞构造:

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    var cell = collectionView.dequeueReusableCellWithReuseIdentifier("WidgetMenuCellIdentifier", forIndexPath: indexPath) as UICollectionViewCell

    cell.removeSubviews()

    // some code setup

    cell.selectedBackgroundView = UIView()
    cell.selectedBackgroundView.backgroundColor = UIColor.purpleColor()

    return cell
}

2 个答案:

答案 0 :(得分:3)

  1. 对您的UICollectionViewCell进行子类化
  2. 待办事项

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    
    // your code
    cell.selectedBackgroundView.hidden = true
    
    return cell
    }
    
  3. 然后在你的子类中:

    override var selected:Bool {
       willSet {
           self.selectedBackgroundView.hidden = false
       }
    }
    
  4. 它应该有用。

答案 1 :(得分:0)

似乎此代码正在动画中执行,有时会根据各种属性的动画效果导致意外行为。另一个复杂因素是,由于细胞被重复使用,如果已经正确配置了重复使用的细胞(即没有任何动画),它将不会再生。在样式化selectedBackgroundView之后添加以下内容是我能想到的最少hacky解决方案。

[cell.selectedBackgroundView.layer removeAllAnimations];

根据您的单元格的不同,您可能还需要考虑删除其他图层上的动画。例如:

[cell.backgroundView.layer removeAllAnimations];