我有一个UICollectionView。内部有一些细胞,背景为白色。我已将selectedBackgroundView设置为基本的紫色视图。
我的CollectionView有一个高度为0的约束,当我按下一个按钮时,我将约束更新为80.当我这样做时,在动画中我可以看到屏幕上的紫色背景,直到结束关于动画,我无法理解为什么或如何防止这种情况? 其他一切工作正常,它只是一个视觉效果"错误。 关于如何解决这个问题的任何建议?
在动画中你可以看到紫色出现的bug的Gif
如果它有任何帮助,这是我的细胞构造:
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
}
答案 0 :(得分:3)
待办事项
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
// your code
cell.selectedBackgroundView.hidden = true
return cell
}
然后在你的子类中:
override var selected:Bool {
willSet {
self.selectedBackgroundView.hidden = false
}
}
它应该有用。
答案 1 :(得分:0)
似乎此代码正在动画中执行,有时会根据各种属性的动画效果导致意外行为。另一个复杂因素是,由于细胞被重复使用,如果已经正确配置了重复使用的细胞(即没有任何动画),它将不会再生。在样式化selectedBackgroundView
之后添加以下内容是我能想到的最少hacky解决方案。
[cell.selectedBackgroundView.layer removeAllAnimations];
根据您的单元格的不同,您可能还需要考虑删除其他图层上的动画。例如:
[cell.backgroundView.layer removeAllAnimations];