【问题标题】:How to use the scroll view content offset property?如何使用滚动视图内容偏移属性?
【发布时间】:2020-07-20 02:23:05
【问题描述】:

我有以下代码:

   if scrollView.contentOffset.x == 10 {
            print("works")
        }

虽然当我向左或向右滚动时,控制台上没有任何内容。我知道这是非常基本的,虽然我只是想在深入了解之前理解这一点。

【问题讨论】:

  • 你把这段代码放在哪里了?另请注意,x 内容偏移量不能完全等于 到 10。
  • 我把它放在视图中确实加载了,并且滚动视图的出口也等于 scrollView,你的意思是它必须大于或小于 10

标签: swift xcode uiscrollview contentoffset


【解决方案1】:

我把这个放在视图中确实加载了

这意味着代码将在加载视图时检查内容偏移量。此时,如果滚动视图的 x 偏移量恰好 10,则将打印消息。它不关心那一刻之后会发生什么。

当您手动将滚动视图滚动到某个偏移量时,您似乎希望它打印消息。

一种方法是将代码移至scrollViewDidScroll。每次内容偏移量变化时都会调用该函数。

extension YourViewController: UIScrollViewDelegate {
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        // this checks for whether contentOffset.x is around 10 (contented shifted to the right by 10 points)
        if abs(scrollView.contentOffset.x - 10) < 1 {
            print("works")
        }
    }
}

记得将滚动视图的委托设置为self

scrollView.delegate = self

请注意,我将条件更改为abs(scrollView.contentOffset.x - 10) &lt; 1。这是为了给它一些“允许”,而不是说 x 偏移量必须恰好 10。当您滚动时,内容偏移量很少会恰好更改为 10(或恰好 anything,就此而言)。你必须是一个非常准确的滚动条才能做到这一点:) 因此,我允许从 9 到 11 的任何值通过检查。但即使有这个余量,如果你快速滚动,“作品”也不会被打印出来。因为随着滚动速度的加快,内容偏移量每次都会发生较大的变化。您可能需要根据自己的需要调整津贴。

如果您想在每次用户停止滚动时打印“作品”,您可以实现以下两种方法:

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    if abs(scrollView.contentOffset.x - 10) < 1 {
        print("works")
    }
}

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if abs(scrollView.contentOffset.x - 10) < 1 {
        print("works")
    }
}

【讨论】:

  • 非常感谢您花时间帮助我解决这个问题,谢谢。
猜你喜欢
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多