如果我在diffableDataSource上使用UICollectionViewController并点击手机,它会高亮显示,但当我仍然用手指着它时,它就不会高亮显示了。如果要在diffableDataSource中使用UIViewController + collectionView,那么一切都会正常工作,并且单元格会一直高亮显示,直到我释放它的手指。如果在标准dataSource中使用UICollectionViewController,情况也是一样--一切都很正常。有没有人也注意到这个问题?任何建议或想法都将不胜感激,也许我只是错过了一些东西,但现在感觉更像是苹果方面的一个bug
只需将这些方法添加到CollectionViewController.swift文件中:
override func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {
print("cell highlighted")
}
override func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) {
print("cell unhighlighted")
} 你会看到,当你的手指还在一个单元格上时,"cell unhighlighted“被打印出来
发布于 2020-09-29 21:38:11
好的,结果是我们需要设置
installsStandardGestureForInteractiveMovement = false此变量为UICollectionViewController安装标准手势识别器,以驱动重新排序过程。默认情况下,它被设置为true,但是为了正常工作,collectionView dataSource必须通过实现适当的方法来声明它支持对项目进行重新排序。在旧的good dataSource方法中,moveItemAt被标记为可选,而在diffableDataSource中,它不再被声明为可选,这就是该变量导致上述问题中描述的行为的原因。有关此变量的更多信息,请参阅文档:https://developer.apple.com/documentation/uikit/uicollectionviewcontroller/1623979-installsstandardgestureforintera
https://stackoverflow.com/questions/64117774
复制相似问题