UICollectionViewController + diffableDataSource - 当您的手指仍在其上时,单元格不会突出显示
Posted
技术标签:
【中文标题】UICollectionViewController + diffableDataSource - 当您的手指仍在其上时,单元格不会突出显示【英文标题】:UICollectionViewController + diffableDataSource - cell gets unhighlighted while your finger is still on it 【发布时间】:2020-09-29 10:30:11 【问题描述】:如果我将UICollectionViewController
与diffableDataSource
一起使用并点击单元格 - 它会突出显示,但当我仍然握住它时会变得不突出。
如果将UIViewController + collectionView
与diffableDataSource
一起使用,那么一切都会按预期工作,并且单元格会一直突出显示,直到我松开手指为止。如果将UICollectionViewController
与标准dataSource
一起使用,情况相同——一切正常。
有没有人也注意到这个问题?任何建议或想法都将不胜感激,也许我只是遗漏了一些东西,但现在感觉更像是苹果方面的错误
您可以在此处查看示例: https://github.com/ashishbl86/MockAppStore/blob/0ea8e74a4823c8c80bd7e8d5c6a9514958fbe459/MockAppStore/CollectionViewController.swift
只需将这些方法添加到 CollectionViewController.swift 文件中:
override func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath)
print("cell highlighted")
override func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath)
print("cell unhighlighted")
当您的手指仍在单元格上时,您会看到打印出“未突出显示的单元格”
【问题讨论】:
【参考方案1】:好吧,事实证明我们需要设置
installsStandardGestureForInteractiveMovement = false
此变量为UICollectionViewController
安装标准手势识别器以驱动重新排序过程。
默认情况下它设置为true
,但为了使事情正常工作,collectionView dataSource
必须通过实现适当的方法来声明它对重新排序项目的支持。
在旧的 dataSource
方法中,moveItemAt
被标记为可选,而在 diffableDataSource
中,它不再被声明为可选,这就是该变量导致上述问题中描述的行为的原因。
文档中提供了有关此变量的更多信息:
https://developer.apple.com/documentation/uikit/uicollectionviewcontroller/1623979-installsstandardgestureforintera
【讨论】:
以上是关于UICollectionViewController + diffableDataSource - 当您的手指仍在其上时,单元格不会突出显示的主要内容,如果未能解决你的问题,请参考以下文章