假设我有一个使用UICollectionViewFlowLayout的UICollectionView,格式如下:
1 2 3
4 5 6
7 8 9
我触摸单元格9并将其拖到单元格6上,将单元格9移动到单元格6所在的位置,将单元格6移动到单元格9所在的位置:
1 2 3
4 5 9
7 8 6
有没有办法轻松移动单元格6并将其设置为单元格9的位置,以及将单元格9移动到单元格6所在的位置?或者我是否必须继承UICollectionViewLayout?如果我必须继承UICollectionViewLayout,那怎么办呢?我已经尝试在
中明确设置单元格的中心 -(UICollectionViewLayoutAttributes*)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
但没有成功。
答案 0 :(得分:22)
经过多次敲击后,我找到的解决方案是在moveItemAtIndexPath:toIndexPath
内使用performBatchUpdates:completion
。根据{{1}}的{{3}}:
如果要在一个动画操作中插入,删除,重新加载或移动集合视图周围的单元格,而不是在几个单独的动画中,则可以使用此方法。使用updates参数中传递的阻止来指定您要执行的所有操作。
所以,我基本上做的是
performBatchUpdates:completion
答案 1 :(得分:0)
您是否尝试使用moveItemAtIndexPath直接重新排序项目:toIndexPath :?
- 确保您实际上重新订购了基础模型集合,以便在下次完全重新加载时更改。
答案 2 :(得分:0)
Swift代码:
self.collectionView.performBatchUpdates({
self.collectionView.moveItem(at: selectedIndexPath, to: targetIndexPath)
self.collectionView.moveItem(at: targetIndexPath, to: selectedIndexPath)
}, completion: nil)