选择单元格时 UICollectionView 正在滚动

Posted

技术标签:

【中文标题】选择单元格时 UICollectionView 正在滚动【英文标题】:UICollectionView is scrolling when selecting a cell 【发布时间】:2015-12-04 05:03:21 【问题描述】:

当我尝试在 UICollectionView 中选择一个项目时遇到问题,因为当我点击它时它会滚动一点。

我知道didSelectItemAtIndexPath 正在被调用,但我想在选择时阻止滚动。我只希望集合视图在用户滚动时滚动,但如果用户只是点击单元格,它不应该移动。只有应该被选中。

希望你能帮助我,因为我不知道如何防止这个问题。

任何帮助将不胜感激。

【问题讨论】:

你能分享你的代码吗? 在 collectionView 中使用列表布局时也会发生这种情况,使用与 UITableView 中的功能等效的代码。 【参考方案1】:

如果您使用collectionview.selectItem(at: indexpath, animated: true, scrollPosition: .top) 以编程方式选择单元格——并且由于您没有与我们分享您的任何代码,我们假设这是正确的...

...那么像我一样,您可能没有意识到您可以像这样使用空集:collectionview.selectItem(at: indexpath, animated: true, scrollPosition: [])

【讨论】:

这太可怕了,因为[.foo].foo 的等效方法是什么时候指定OptionSet?!【参考方案2】:

如果您启用了分页并且 CollectionView 手动滚动到与预期页面边界不对齐的位置,则可能会发生这种情况。当您选择单元格时,它会调整以将 CollectionView 放置在正确的页面边界处。

【讨论】:

嗨@CodeSmith,两年后这对我有帮助,但我确实想在我的滚动视图上保持分页行为。你有没有做到两全其美? 我认为我的解决方法是实现自定义 UICollectionViewLayout 并让页面大小正确适合屏幕。页面偏离了几个像素,布局解决了大小问题。【参考方案3】:

在 Swift 5 中你可以做到

let indexPath = IndexPath(item: 10, section: 0)

self.collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .init(rawValue: 0))

viewDidAppearviewDidLayoutSubviews

【讨论】:

【参考方案4】:

你可以试试这个:

collectionView.selectItem(at: newIdexPath, animated: true, scrollPosition: UICollectionViewScrollPosition(rawValue: 0))

【讨论】:

【参考方案5】:

斯威夫特 5

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 

        collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)


【讨论】:

以上是关于选择单元格时 UICollectionView 正在滚动的主要内容,如果未能解决你的问题,请参考以下文章

触摸单元格时 UICollectionView 崩溃

移除前一个单元格时,UiCollectionView 跳转到下一个单元格

iOS中删除单元格时UICollectionView的动画时间

渲染 UICollectionView 的单元格时不遵守部分插图

如何在锁定其中一些单元格时重新排序 UICollectionView 单元格

UIcollectionview 一次选择多个单元格