【问题标题】:How can I detect when iOS ScrollView is at the very top?如何检测 iOS ScrollView 何时位于最顶端?
【发布时间】:2019-12-17 00:31:45
【问题描述】:

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

我尝试使用此代码:

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

但即使我没有到达顶部,它也会打印“顶部”。

【问题讨论】:

    标签: ios swift uiscrollview


    【解决方案1】:

    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!")
        }
      }
    

    【讨论】:

    • 好的,我尝试使用打印语句 scrollViewDidScrollToTop,但是当我到达顶部时它没有打印任何内容。
    • 奇怪。您是否尝试使用 scrollViewDidScroll 来查看是否一切都正确连接?见上面的编辑。
    • 我相信 scrollViewDidScrollToTop 仅在您点击状态栏以将滚动视图滚动到最顶部时调用,而不是在手动滚动到顶部时调用。
    • 是的,编辑工作。但是,即使 scrollView 不完全位于顶部,它也会打印“顶部”消息。
    • 您可能还需要考虑滚动视图的adjustedContentInset,例如scrollView.contentOffset.y + adjustedContentInset.top == 0
    【解决方案2】:

    你可以试试

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多