选择单元格时 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))
在viewDidAppear
或viewDidLayoutSubviews
【讨论】:
【参考方案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 跳转到下一个单元格
iOS中删除单元格时UICollectionView的动画时间
渲染 UICollectionView 的单元格时不遵守部分插图