iOS 9添加了一个能力点击并按住以轻松重新排列集合视图单元格。在琐碎的情况下启用此功能非常简单。只需在UICollectionViewController
上实现一项功能。
func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath)
如果您想了解有关该功能的更多文档,请参阅UICollectionViewDataSource
中的定义。
这并不是只使用自定义布局。如果让它在更复杂的情况下工作需要什么?
答案 0 :(得分:1)
没有详细记录,但有2个强制性覆盖才能正常工作。在UICollectionViewLayout
子类中实现以下2个函数
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
return self.itemAttributes.filter { $0.frame.intersects(rect) }
}
首先,您需要确保将布局中的项属性过滤为仅 包含给定rect中的属性。如果你包含更多内容,就会感到困惑。
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
return self.itemAttributes.first(where: { $0.indexPath.item == indexPath.item })
}
不确定为什么这是必要的,你认为UIKit可以根据之前的调用推断出正确的属性,但它不能。无论如何,您只需要能够获取给定indexPath的正确属性。