iOS 9增加了点击和保持重新排列集合视图单元格的能力。在微不足道的情况下启用此功能非常简单。只需在UICollectionViewController上实现一个函数。
func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath)
如果您想要更多关于该函数的文档,请参阅UICollectionViewDataSource中的定义。
不过,这并不仅仅适用于自定义布局。在更复杂的情况下,怎样才能使它发挥作用呢?
发布于 2016-10-21 04:17:55
它没有很好的文档,但有两个强制重写,这是正确的工作。在您的UICollectionViewLayout子类中实现以下两个函数
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获取正确的属性。
https://stackoverflow.com/questions/40168345
复制相似问题