ios 选择单元格时UICollectionView正在滚动

axzmvihb  于 2023-05-19  发布在  iOS
关注(0)|答案(6)|浏览(161)

当我尝试选择UICollectionView中的一个项目时遇到了麻烦,因为当我单击它时,它会滚动一点。
我知道didSelectItemAtIndexPath正在被调用,但我想在选择时防止滚动。我只希望集合视图在用户滚动时滚动,但如果用户只是点击单元格,它不应该移动。只应选择。
我希望你能帮助我,因为我不知道如何防止这个问题。
任何帮助将非常感激。

x759pob2

x759pob21#

如果您使用collectionview.selectItem(at: indexpath, animated: true, scrollPosition: .top)以编程方式选择单元格--由于您没有与我们共享任何代码,让我们假设这是正确的……
......那么像我一样,你可能没有意识到你可以像这样使用空集:collectionview.selectItem(at: indexpath, animated: true, scrollPosition: [])

jobtbby3

jobtbby32#

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

y0u0uwnf

y0u0uwnf3#

在Swift 5中,你可以

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

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

viewDidAppearviewDidLayoutSubviews

2nc8po8w

2nc8po8w4#

你可以试试这个:

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

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
qni6mghb

qni6mghb6#

Swift 5

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

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

}

相关问题