问题描述
如果我将UICollectionViewController
与diffableDataSource
一起使用并点击单元格-它会突出显示,但是当我仍然用手指按住它时,它会变得不突出显示。
如果将UIViewController + collectionView
与diffableDataSource
一起使用-则一切按预期运行,并且单元格一直突出显示,直到我松开手指为止。如果将UICollectionViewController
与标准dataSource
一起使用,则效果相同-一切正常。
有没有人注意到这个问题?任何建议或想法都将不胜感激,也许我只是想念一些东西,但现在感觉更像是苹果方面的错误
只需将以下方法添加到CollectionViewController.swift文件中即可:
override func collectionView(_ collectionView: UICollectionView,didHighlightItemAt indexPath: IndexPath) {
print("cell highlighted")
}
override func collectionView(_ collectionView: UICollectionView,didUnhighlightItemAt indexPath: IndexPath) {
print("cell unhighlighted")
}
您会看到当手指仍在单元格上时,“单元格未突出显示”的打印内容
解决方法
好吧,事实证明我们需要设置
installsStandardGestureForInteractiveMovement = false
此变量为UICollectionViewController
安装了标准手势识别器,以驱动重新排序过程。
默认情况下将其设置为true
,但是为了使工作正常,collectionView dataSource
必须通过实现适当的方法声明其对项目重新排序的支持。
在旧的dataSource
方法中,moveItemAt
被标记为可选,而在diffableDataSource
中,该方法不再被标记为可选,这就是此变量导致问题中所述行为的原因。以上。
有关此变量的更多信息,可在docs中找到:
https://developer.apple.com/documentation/uikit/uicollectionviewcontroller/1623979-installsstandardgestureforintera