使用动作将CollectionView滚动到下一个单元格

时间:2018-12-04 06:22:58

标签: ios swift uicollectionview uislider

我有一个水平的collectionview,每次点击按钮时都会添加一个新的单元格。每次点击按钮后,当这些单元格不再可见时,我试图将collectionview滚动到下一个单元格。

我现在拥有的代码无法正常工作

代码:

@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 :(得分:3)

重新加载数据后,调用以下行。

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

答案 1 :(得分:0)

使用以下代码来满足您的需求。对于动画,您只需要在scrollToRow函数的动画中传递值true / false。 希望这会对您有所帮助!

要滚动顶部而不显示动画

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行