我有一个与 collectionView 大小相同的垂直方向单元格,我设置了collectionView.isPagingEnabled = true
. 屏幕上一次只有 1 个活动的可见单元格:
layout.scrollDirection = .vertical
collectionView.isPagingEnabled = true
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
// collectionView is the same width and height as the device
let width = collectionView.frame.width
let height = collectionView.frame.height
return CGSize(width: width, height: height)
}
我需要知道用户上下滑动后整个单元格何时出现在屏幕上(当页面完成分页并在屏幕上居中时)。或者换句话说,我需要知道用户何时不在单元格之间滑动或拖动。我试过这个:
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if decelerate {
if scrollView.frame.height == collectionView.frame.height {
let indexPaths = collectionView.indexPathsForVisibleItems
for indexPath in indexPaths {
if let cell = collectionView.cellForItem(at: indexPath) as? MyCell {
print("currentCell: \(indexPath.item)") // do something in cell
}
}
}
}
}
我遇到的问题是即使我拖动 1/2 方式,这意味着如果我在第 2 项上,将 1/2 拖动到第 3 项,然后拖回第 2 项,然后会print("currentCell: \(indexPath.item)")
打印出来。它应该打印的唯一时间是该单元格是否完全在屏幕上,而不是在单元格 2 和 3(或 2 和 1 等)之间。currentCell: 3
currentCell: 2
currentCell: 3