防止UICollectionView在contentOffset之外滚动。

问题描述 投票:3回答:1

我创建了一个有4个单元格的CollectionView,单元格框架等于整个窗口框架,这样我就可以像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停止向右滚动,我想看到的是单元格仍然存在。

我尝试了不同的程序:这个程序只是在首先滚动了滚动View之后才阻止了它,从来没有重新启用其他方向的滚动。

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

}

正如其他StackOverflow主题中所建议的那样。

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

        }

        collectionView.isScrollEnabled = true

    }

但这只是阻止了两个方向的滚动。 我实际上不知道如何解决这个问题。

ios swift uicollectionview uiscrollview uiscrollviewdelegate
1个回答
0
投票

其实我已经知道如何解决这个问题了,真的很简单。

在我设置collectionView的viewDidLoad方法中,我设置bounces等于false。

 collectionView.bounces = false
© www.soinside.com 2019 - 2024. All rights reserved.