无法获得 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 结束滚动:
编辑: 我尝试获取 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 结束滚动: