如何检测 iOS ScrollView 何时位于最顶部?

How can I detect when iOS ScrollView is at the very top?

如何检测用户何时滚动到我的 collectionView 的最顶部?

我尝试使用此代码:

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
   if collectionView.contentOffset.y <= collectionView.contentSize.height - collectionView.frame.size.height {
       print("top")
   }
}

但它会打印 "top" 即使我没有到达顶部。

你可以试试

func scrollViewDidScroll(_ scrollView: UIScrollView) {
   if scrollView.contentOffset.y == 0 {
     // top
   }
}

scrollViewDidEndDragging表示用户手指抬起,但因为它有物理模拟惯性,视图可能会继续移动。还有另一个委托方法正是您要查找的内容:scrollViewDidScrollToTop 顾名思义,当您到达滚动视图的顶部时会触发。

编辑: 你也可以试试:

  func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y <= 0 {
      print("top!")
    }
  }

编辑第三次的魅力?如果您在顶部,滚动视图停止移动后,这个只会触发一次。

  override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y == 0 {
      print("top!")
    }
  }