gpt4 book ai didi

ios - CollectionView 单元格在水平滚动后向右移动

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:02 25 4
gpt4 key购买 nike

我有一个 collectionView 单元格,它与我的 CollectionView 大小相同,即一次一个单元格显示在屏幕上,我希望单元格之间的最小间隔为 10,问题是当我滚动单元格时单元格不是'不适合整个屏幕,每次滚动后单元格的移动都会增加。 (查看屏幕截图以便更好地理解)

This is 3rd cell

This is 6th cell

enter image description here

最佳答案

我假设您已经为 Collection View 设置了 pagingEnabled。它从 UIScrollView 继承此属性(因为 UICollectionViewUIScrollView 的子类)。

问题是 Collection View 使用自己的宽度(在您的帖子中为 320 磅)作为页面的宽度。您的每个单元格都与 Collection View 的宽度相同,但是单元格之间有一个 10 磅的“间距”。这意味着从单元格 0 的左边缘到单元格 1 的左边缘的距离是 320 + 10 = 330 点。因此,当您滚动显示单元格 1 时, Collection View 在偏移量 320(它自己的宽度)处停止滚动,但单元格 1 实际上从偏移量 330 开始。

最简单的修复可能是关闭 pagingEnabled 并通过覆盖 Collection View 委托(delegate)中的 scrollViewWillEndDragging(_:withVelocity:targetContentOffset:) 自己实现分页,如下所示:

override func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
guard let flowLayout = collectionViewLayout as? UICollectionViewFlowLayout else { return }

let pageWidth = scrollView.bounds.size.width + flowLayout.minimumInteritemSpacing

let currentPageNumber = round(scrollView.contentOffset.x / pageWidth)
let maxPageNumber = CGFloat(collectionView?.numberOfItems(inSection: 0) ?? 0)

// Don't turn more than one more page when decelerating, and don't go beyond the first or last page.
var pageNumber = round(targetContentOffset.pointee.x / pageWidth)
pageNumber = max(0, currentPageNumber - 1, pageNumber)
pageNumber = min(maxPageNumber, currentPageNumber + 1, pageNumber)
targetContentOffset.pointee.x = pageNumber * pageWidth
}

您还需要设置项目大小以匹配设备屏幕大小,并将减速率设置为快:

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()

guard let flowLayout = collectionViewLayout as? UICollectionViewFlowLayout, let collectionView = collectionView else { return }
flowLayout.itemSize = collectionView.bounds.size

collectionView.decelerationRate = UIScrollViewDecelerationRateFast
}

结果:

demo

关于ios - CollectionView 单元格在水平滚动后向右移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43412939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com