当我尝试在UICollectionView中选择一个项目时,我遇到了麻烦,因为当我点击它时它会滚动一点。
我知道正在调用didSelectItemAtIndexPath,但我想在选择时阻止滚动。我只希望在用户滚动时滚动集合视图,但如果用户只是点击单元格则不应移动。只应选择。
我希望你能帮助我,因为我不知道如何防止这个问题。
任何帮助都将非常感激。
答案 0 :(得分:49)
如果您使用collectionview.selectItem(at: indexpath, animated: true, scrollPosition: .top)
以编程方式选择单元格 - 并且由于您未与我们共享任何代码,请假设这是正确的...
...然后像我一样你可能没有意识到你可以使用这样的空集:collectionview.selectItem(at: indexpath, animated: true, scrollPosition: [])
答案 1 :(得分:5)
如果您启用了分页并且CollectionView被手动滚动到与预期页面边界不对齐的位置,则会发生这种情况。当您选择单元格时,它会进行调整以将CollectionView放在正确的页面边界。
答案 2 :(得分:1)
你可以试试这个:
collectionView.selectItem(at: newIdexPath, animated: true, scrollPosition: UICollectionViewScrollPosition(rawValue: 0))
答案 3 :(得分:1)
在Swift 5中,您可以做到
let indexPath = IndexPath(item: 10, section: 0)
self.collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .init(rawValue: 0))
在viewDidAppear
或viewDidLayoutSubviews
答案 4 :(得分:0)
迅速5
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
}
答案 5 :(得分:-3)
对于Objective-C
[self.collectionView selectItemAtIndexPath:path animated:NO scrollPosition:UICollectionViewScrollPositionNone]
对于Swift
collectionview.selectItemAtIndexPath(indexPath: path, animated: false, scrollPosition: None)