Предотвращение прокрутки UICollectionView за пределы contentOffset

Я создал collectionView с 4 ячейками, рамки ячеек равны всей рамке окна, поэтому я могу прокручивать их, как если бы они были 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
    }

}

Как было предложено в других темах StackOverflow:

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

        }

        collectionView.isScrollEnabled = true

    }

Но это просто блокирует прокрутку в обоих направлениях. Я на самом деле не знаю, как это решить.


person Community    schedule 30.05.2020    source источник


Ответы (1)


Я на самом деле понял, как решить эту проблему, это действительно легко.

В моем методе viewDidLoad, где я устанавливаю collectionView, я устанавливаю отскоки равными false:

 collectionView.bounces = false
person Community    schedule 30.05.2020