Search code examples
iosswiftuicollectionviewuislider

Using an action to scroll CollectionView to the next cell


I have a horizontal collectionview that adds a new cell every time I tap the button. I am attempting to scroll the collectionview to the next cell once the cells are no longer visible each time I tap the button.

The code I have now is not working properly

Code:

@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)
}

How can I fix this so that it scrolls correctly when I tap the button?


Solution

  • After reload your data, call this lines.

    let lastItem = resultsCollection(resultsCollection, numberOfItemsInSection: 0) - 1
    let indexPath = IndexPath(row: lastItem, section: 0)
    
    resultsCollection.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)