无法移动UICollectionView装饰和补充视图

dom*_*ikk 16 objective-c ipad ios uicollectionview

UICollectionView装修和补充意见似乎是一个很大的谜.目前似乎没有示例代码.我设法让两种类型都在自定义布局中工作(有关详细信息,请参阅此帖子).只要它们保持在相同的位置,一切都很好(即如果它们layoutAttributes.frame没有改变).

然而,只要我layoutAttributes对装饰或补充视图进行了重新布局,就会在视觉上重复 - 即在背景中的原始位置有一个副本,并在新位置有副本.如果我从XIB实例化它们或完全在代码中实例化行为,并且正常单元格不会发生这种行为,则行为是相同的.

起初我认为这是某种重绘问题,但这些"副本"在重新布局,重绘等方面都存在.但它们不是真正的副本,因为layoutAttributesForDecorationView它们从未被调用过(仅适用于新位置).在后台似乎有一些缓存UICollectionView.

有没有人得到这个工作或有任何想法.我必须说我是iOS平台的新手,所以它也可以是简单的东西,如设置"剪辑绑定"或"清除图形上下文"属性(我试过这些,但它可能是类似的东西).

这让我很疯狂,很奇怪,那里绝对没有示例代码.

我问自己:装修和补充意见是不是要重新定位?(我希望不是)

The*_*ind 12

嗨,这是一个老问题,但有一个答案.

实际上,当我实现自己的Layout对象时,我也遇到了这些问题,直到我意识到必须缓存您在自定义布局中创建的任何布局属性对象.实际上在文档中有一个非常模糊的引用(我现在记不清楚它的精确位置),这很容易被误解.

基本上,一旦您为索引路径上的单元格请求了layoutAttributes对象,您应该保留属性对象(例如,将其保留在带有索引路径的字典中作为键将执行)并为后续任何及所有后续内容返回相同的属性对象请求属性.如果不这样做,而是重新创建新的布局属性,批量更新的动画会导致严重的图形故障和人工制品.

  • 如果集合视图使用`isEqual`来比较`UICollectionViewLayoutAttributes`实例,那么通过深度比较覆盖`isEqual`可以解决问题,而不必保留对象. (4认同)

小智 1

我遇到过同样的问题。UICOllectionview 似乎存在一些错误(这不是我第一次看到)。我通过不使用“performBatchUpdates”来修复它。我丢失了动画 - 但列表中没有不需要的视图。