UICollectionViewController + diffableDataSource - 当您的手指仍在其上时,单元格不会突出显示

Posted

技术标签:

【中文标题】UICollectionViewController + diffableDataSource - 当您的手指仍在其上时,单元格不会突出显示【英文标题】:UICollectionViewController + diffableDataSource - cell gets unhighlighted while your finger is still on it 【发布时间】:2020-09-29 10:30:11 【问题描述】:

如果我将UICollectionViewControllerdiffableDataSource 一起使用并点击单元格 - 它会突出显示,但当我仍然握住它时会变得不突出。 如果将UIViewController + collectionViewdiffableDataSource 一起使用,那么一切都会按预期工作,并且单元格会一直突出显示,直到我松开手指为止。如果将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 - 当您的手指仍在其上时,单元格不会突出显示的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 像 Instagram 探索选项卡

无法使用自动布局将简单的自行调整大小的集合视图单元格调整为标签大小