无法获得 collectionView 单元格的正确 indexPath

Cant get correct indexPath of collectionView cell

编辑: 我尝试获取 collectionView 中当前单元格的正确索引路径。

项目很简单:一个相册和一个带有文本的标签。标签中的文本应该是当前的 indexPath。

关于照片 - 一切正常。问题出在标签中的 indexPath 参数。

第一次向右滑动将 indexPath 更改为 + 2 而不是 +1:从 [0,0] 到 [0,2] - 而不是 [0,1]。在此之后进行的右滑动可以正常工作。 但是第一次向左滑动将 indexPath 的值更改为 -3。例如,如果 indexPath 是 [0,6] - 第一次向左滑动会将其更改为 [0, 3]。

我做了一个10秒的视频,代表一个问题:https://www.youtube.com/shorts/Qxqr_Q9SDJ8 这些按钮是为了更容易注意到变化而制作的。它们的工作方式类似于 right/left 滑动。本机滑动给出相同的结果。

密码是这个:

var currentIndexPath: IndexPath = [0,0]

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
    
            var testIndexPath = indexPath
            cell.imageView.image = allPhotos[testIndexPath.item].faceCard
           
            return cell
        }

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
           currentIndexPath = indexPath
       }

label.text = "\(currentIndexPath)"

您可以覆盖 scrollViewDidScroll 方法并在滑动时获取可见单元格的 indexPath:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.bounds.size)
    let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
    if let testIndexPath = collectionView.indexPathForItem(at: visiblePoint) {
        label.text = "testIndexPath: \(testIndexPath)"
    }
}

我认为你应该使用 collectionview.indexPathForVisibleItems 在 collectionView 结束滚动时获取 indexPath。

您可以通过以下方式检查 collectionView 结束滚动: