在滚动期间点击时,UICollectionView 不再识别点击单元格?

UICollectionView does not recognize tap on cell anymore when tapped during scrolling?

出现 UICollectionView,无需滚动,触摸其中一个单元格即可立即在 collectionView(_:didSelectItemAtIndexPath:) 中识别。

但是,当滚动 UICollectionView 并点击一个单元格以停止滚动运动时,将不再识别随后对该单元格的点击,并且不会触发 collectionView(_:didSelectItemAtIndexPath:)

只有在没有点击的情况下滚动自行停止时,才会识别后续的点击。

我已经设置了

collectionView.delaysContentTouches = false
collectionView.canCancelContentTouches = false

override func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

旁注:

设置 collectionView.allowsSelection = false 并将 UITapeGestureRecognizer 添加到单元格时会发生相同的行为。

为什么点击单元格无法识别?

更新:另一个奇怪的效果是,当UICollectionView滚动到其内容之外的区域时,它会反弹回来,但不会反弹而是停止滚动并在释放平底锅后快速点击单元格时停止视图。在那个状态下,没有识别出点击,所以这基本上与上面描述的行为相同。

此行为的原因是集合视图位于视图控制器的视图内,该视图控制器带有(简化的,不要介意强制解包):

UIApplication.sharedApplication().windows.last?.makeKeyAndVisible()
let parentViewController = UIApplication.sharedApplication().keyWindow!.rootViewController
parentViewController.presentViewController(self, animated: true, completion: nil)

解决方案是删除整个第一行 makeKeyAndVisible