当我尝试选择UICollectionView中的一个项目时遇到了麻烦,因为当我单击它时,它会滚动一点。我知道didSelectItemAtIndexPath正在被调用,但我想在选择时防止滚动。我只希望集合视图在用户滚动时滚动,但如果用户只是点击单元格,它不应该移动。只应选择。我希望你能帮助我,因为我不知道如何防止这个问题。任何帮助将非常感激。
UICollectionView
didSelectItemAtIndexPath
x759pob21#
如果您使用collectionview.selectItem(at: indexpath, animated: true, scrollPosition: .top)以编程方式选择单元格--由于您没有与我们共享任何代码,让我们假设这是正确的……......那么像我一样,你可能没有意识到你可以像这样使用空集:collectionview.selectItem(at: indexpath, animated: true, scrollPosition: [])
collectionview.selectItem(at: indexpath, animated: true, scrollPosition: .top)
collectionview.selectItem(at: indexpath, animated: true, scrollPosition: [])
jobtbby32#
如果启用了分页,并且CollectionView手动滚动到与预期的页面边界不对齐的位置,则可能发生这种情况。当您选择单元格时,它会进行调整以将CollectionView放置在正确的页面边界处。
y0u0uwnf3#
在Swift 5中,你可以
let indexPath = IndexPath(item: 10, section: 0) self.collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .init(rawValue: 0))
在viewDidAppear或viewDidLayoutSubviews中
viewDidAppear
viewDidLayoutSubviews
2nc8po8w4#
你可以试试这个:
collectionView.selectItem(at: newIdexPath, animated: true, scrollPosition: UICollectionViewScrollPosition(rawValue: 0))
p8ekf7hl5#
在我的例子中,我通过定义一个定制的UICollectionViewFlowLayout解决了这个问题。
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
qni6mghb6#
Swift 5
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true) }
6条答案
按热度按时间x759pob21#
如果您使用
collectionview.selectItem(at: indexpath, animated: true, scrollPosition: .top)
以编程方式选择单元格--由于您没有与我们共享任何代码,让我们假设这是正确的……......那么像我一样,你可能没有意识到你可以像这样使用空集:
collectionview.selectItem(at: indexpath, animated: true, scrollPosition: [])
jobtbby32#
如果启用了分页,并且CollectionView手动滚动到与预期的页面边界不对齐的位置,则可能发生这种情况。当您选择单元格时,它会进行调整以将CollectionView放置在正确的页面边界处。
y0u0uwnf3#
在Swift 5中,你可以
在
viewDidAppear
或viewDidLayoutSubviews
中2nc8po8w4#
你可以试试这个:
p8ekf7hl5#
在我的例子中,我通过定义一个定制的UICollectionViewFlowLayout解决了这个问题。
并将其分配给collectionView
qni6mghb6#
Swift 5