防止 UICollectionView 在 contentOffset 之外滚动

Preventing UICollectionView from scrolling outside of contentOffset

我创建了一个包含 4 个单元格的 collectionView,单元格框架等于整个 window 框架,这样我就可以滚动浏览它们,就像它们是 PageViewController 一样。

lazy var collectionView : PagesCollectionView = {
  let layout = UICollectionViewFlowLayout()
   layout.scrollDirection = .horizontal
  layout.minimumLineSpacing = 0
    let collectionView = PagesCollectionView(frame: .zero, collectionViewLayout: layout)
    collectionView.delegate = self
    collectionView.dataSource = self
    collectionView.isPagingEnabled = true
    collectionView.alwaysBounceHorizontal = false

    return collectionView
}()

我想要实现的目标是,当我在第一个单元格中并向左滚动时(contentOffset 为负),collectionView 停止滚动,而当我在最后一个单元格中时,collectionView 停止向右滚动, 我还想看手机

我尝试了不同的程序: 这个只有在首先滚动它之后才阻止 scrollView,从不重新启用另一个方向的滚动:

 func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if(scrollView.contentOffset.x == 0){
        scrollView.isScrollEnabled = false
    }

}

根据其他 Whosebug 主题的建议:

  func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        if(scrollView.contentOffset.x == 0){
            collectionView.isScrollEnabled = false

        }

        collectionView.isScrollEnabled = true

    }

但这只会阻止双向滚动。 我其实不知道怎么解决。

我居然想出了解决这个问题的方法,真的很简单。

在我设置 collectionView 的 viewDidLoad 方法中,我将 bounces 设置为 false:

 collectionView.bounces = false