【问题标题】:UICollectionView: Scroll to top and perform action when scrolling finishedUICollectionView:滚动到顶部并在滚动完成时执行操作
【发布时间】:2026-02-03 05:30:01
【问题描述】:

我将收藏视图滚动到顶部,并希望在滚动完成后执行一个操作。有什么方法可以轻松实现吗?

滚动到顶部可以使用

  • setContentOffset(CGPoint(x: 0, y: 0))
  • scrollRectToVisible
  • scrollToItem(at: IndexPath, at: .top)

不幸的是,这些函数都没有使用completion 块,如果我使用animated = false 参数,我可以将它嵌入到UIView.animate() 调用中并使用它的完成块 - 但是集合视图将重用/不甚至在滚动期间显示集合视图单元格。

除了设置一个在特定时间后触发的计时器或使用标志和scrollViewDidScroll 委托函数做一些奇怪的魔法之外,还有什么方法可以在滚动完成时做点什么?

【问题讨论】:

    标签: ios swift scroll uicollectionview


    【解决方案1】:

    因为UICollectionView 确认到UIScrollViewDelegate。使用这个委托函数:

    public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView)
    {
         if collectionView.contentOffset.y == 0
         {
              // perform your action
         }
    } 
    

    这将在滚动停止时调用。

    【讨论】:

    • 因为我不想在每次集合视图滚动时都刷新这属于“使用标志做一些魔术”点 - 我必须设置一个像“doRefreshOnScrollDecelerate”这样的标志。我想避免这种情况。
    • 没有其他我知道的方法。希望您能找到更好的解决方案。
    • 而且我认为不需要设置标志来实现这一点。即使采用这种方法也不行。
    • 是的 - 你如何区分用户手动滚动到顶部和以编程方式滚动到顶部?
    • 但我担心没有其他方法 - 多年来一直在搜索(并等待完成块);-)
    最近更新 更多