当我尝试在 UICollectionView
中选择一个项目时,遇到了麻烦,因为当我点击它时,它会滚动一点。
我知道didSelectItemAtIndexPath
被调用了,但我想在选择时防止滚动。我只希望在用户滚动时才滚动集合视图,但如果用户只是轻按单元格,它不应该移动。应该只是被选中。
希望你能帮助我,因为我不知道如何解决这个问题。
任何帮助将非常感激。
当我尝试在 UICollectionView
中选择一个项目时,遇到了麻烦,因为当我点击它时,它会滚动一点。
我知道didSelectItemAtIndexPath
被调用了,但我想在选择时防止滚动。我只希望在用户滚动时才滚动集合视图,但如果用户只是轻按单元格,它不应该移动。应该只是被选中。
希望你能帮助我,因为我不知道如何解决这个问题。
任何帮助将非常感激。
如果你使用编程方式通过collectionview.selectItem(at: indexpath, animated:true, scrollPosition:.top)
来选择单元格--既然你没有与我们分享任何代码,那么让我们假设这是正确的...
...那么就像我一样,你可能没有意识到可以使用空集合,例如:collectionview.selectItem(at: indexpath, animated: true, scrollPosition: [])
[.foo]
和.foo
成为指定OptionSet
的等效方式了?! - Robert Atkins如果启用了分页并且手动滚动CollectionView到与预期页面边界不对齐的位置,就会发生这种情况。当您选择单元格时,它将进行调整以使CollectionView处于正确的页面边界。
let indexPath = IndexPath(item: 10, section: 0)
self.collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .none)
collectionView.selectItem(at: newIdexPath, animated: true, scrollPosition: UICollectionViewScrollPosition(rawValue: 0))
private var flowLayout: UICollectionViewFlowLayout {
let flowLayout = UICollectionViewFlowLayout()
flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)
flowLayout.scrollDirection = UICollectionView.ScrollDirection.horizontal
flowLayout.minimumInteritemSpacing = 15
return flowLayout
}
并将其分配给collectionView
collectionView.collectionViewLayout = flowLayout
Swift 5
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
}