我有一个UICollectionView
,我在其中显示UICollectionViewCell
。每个单元的height
和width
与collection view
相同。
我想限制用户在进入下一个单元格
后只能滑动回UICollectionViewCell
有点像tinder的体验,虽然我的UICollectionView
中有Pagination enabled
您可以执行以下步骤
你必须在滚动结束后获得当前行并更新
中的当前索引currentIndex
对象然后允许视图滚动或不滚动。确保你已经计算了单元格的宽度和左右边缘以及集合视图的单元格空间
var currentIndex = 0
var cellWidth = 0.0
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let row = scrollView.contentOffset.x / cellWidth
currentIndex = Int(row)
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x < cellWidth * CGFloat(currentIndex){
scrollView.contentOffset = CGPoint(x: cellWidth * CGFloat(currentIndex), y: -20)
scrollView.bounces = false
} else {
scrollView.bounces = true
}
}
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
let indexPathOfVisible = collectionView.indexPath(for: collectionView.visibleCells.first ?? UICollectionViewCell())
if indexPath.row < indexPathOfVisible?.row ?? 0 {
collectionView.scrollToItem(at: indexPathOfVisible!, at: .right, animated: false)
}
}