Использование действия для прокрутки CollectionView к следующей ячейке - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть горизонтальное представление коллекции, которое добавляет новую ячейку каждый раз, когда я нажимаю кнопку.Я пытаюсь прокрутить представление коллекции к следующей ячейке, когда ячейки больше не видны каждый раз, когда я нажимаю кнопку.

Код, который у меня сейчас есть, не работает должным образом

Код:

@IBAction func random(_ sender: Any) {

    resultsCollection.reloadData()

    let collectionBounds = resultsCollection.bounds
    let contentOffset = CGFloat(floor(resultsCollection.contentOffset.x - collectionBounds.size.width))
    self.moveToFrame(contentOffset: contentOffset)

}

func moveToFrame(contentOffset : CGFloat) {

    let frame: CGRect = CGRect(x : contentOffset ,y : resultsCollection.contentOffset.y ,width : resultsCollection.frame.width,height : resultsCollection.frame.height)
        resultsCollection.scrollRectToVisible(frame, animated: true)
}

Как это исправить, чтобы он правильно прокручивался при нажатии на кнопку?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

После перезагрузки данных позвоните по этим строкам.

let lastItem = resultsCollection(resultsCollection, numberOfItemsInSection: 0) - 1
resultsCollection.scrollToItem(at: IndexPath(row: lastItem, section: 0), at: .centeredHorizontally, animated: true)
0 голосов
/ 04 декабря 2018

Используйте следующий код для достижения ваших потребностей.Для анимации вам просто нужно передать значение true / false в анимированной функции scrollToRow.Надеюсь, это поможет вам!

Для прокрутки вверх без анимации

func scrollToTopWithoutAnimation() {
     DispatchQueue.main.async {
         if self.dataArray.count > 0 {
             let indexPath = IndexPath(row: 0, section: 0)
             collectionView.scrollToItem(at: indexPath, at: .top, animated: false)
         }
     }
}

Для прокрутки вверх с анимацией

func scrollToTopWithAnimation() {
     DispatchQueue.main.async {
         if self.dataArray.count > 0 {
             let indexPath = IndexPath(row: 0, section: 0)
             collectionView.scrollToItem(at: indexPath, at: .top, animated: true)

         }
     }
}

Установить строку IndexPath в соответствии с вашими потребностями

...