【问题标题】:UIScrollView scrolling in only one direction at a timeUIScrollView 一次只向一个方向滚动
【发布时间】:2012-06-15 15:31:32
【问题描述】:

我有一个 UIScrollView,我希望它能够双向滚动(目前可以),但一次只能滚动一个。因此,例如,如果您开始水平滚动它,它根本不会垂直移动,直到您松开并开始垂直移动它。我该怎么做呢?

【问题讨论】:

    标签: iphone ios ipad uiscrollview scroll


    【解决方案1】:

    根据@Joe xi 的回答,这对我有用。 斯威夫特 3.0

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView.contentOffset.x != 0 && scrollView.contentOffset.y != 0 {
            scrollView.contentOffset = CGPoint(x: 0, y: 0)
        }
    }
    

    【讨论】:

      【解决方案2】:

      实现这一点的简单方法是将directionalLockEnabled 设置为YES 并像这样实现 UIScrollerView 委托

      - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
          if (scrollView.contentOffset.x != 0 &&
              scrollView.contentOffset.y != 0) {
              scrollView.contentOffset = CGPointMake(0, 0);
          }
      }
      

      【讨论】:

        【解决方案3】:

        这个问题的公认答案并不完全正确。根据directionalLockEnabled 的当前文档(在原始答案中引用):

        如果拖动方向是对角线,则滚动不会被锁定 并且用户可以向任意方向拖动,直到拖动完成。

        我自己也发现了这种情况。如果拖动的初始方向接近 x 轴和 y 轴之间的 45 度角,则方向锁定将失败。如果您或多或少地水平或垂直拖动,则会激活锁定。

        有关实现真正单轴锁定的一种方法,请参阅此链接: http://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html

        【讨论】:

          【解决方案4】:

          directionalLockEnabled 属性设置为YES。来自 Apple 文档:

          如果此属性为 NO,则允许在水平和垂直方向上滚动。如果此属性为 YES 并且用户开始沿一个大致方向(水平或垂直)拖动,则滚动视图将禁用在另一个方向上的滚动。如果拖动方向是对角线,则滚动不会被锁定,用户可以向任意方向拖动,直到拖动完成。默认值为否

          【讨论】:

          • 嗯,我在 IB 中设置了该属性,但它不起作用。它只能以编程方式工作。谢谢!
          • 我将此添加到: - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 为我工作。并在函数中添加:scrollView.directionalLockEnabled。当我阅读此答案时,我花了一些时间才意识到我将 directionLockEnabled 添加到什么以及添加它的位置
          • directionalLockEnabled 已重命名为 isDirectionalLockEnabled
          猜你喜欢
          • 2018-08-20
          • 2011-07-19
          • 2019-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-26
          相关资源
          最近更新 更多