【问题标题】:Disabling Horizontal Scrolling from UIScrollView Swift从 UIScrollView Swift 禁用水平滚动
【发布时间】:2015-11-18 18:45:21
【问题描述】:

滚动视图

我有一个 UIScrollView,带有约束 left: 0, top: 0, right: 0, bottom: 0

内部滚动视图

在这个UIScrollView 的顶部是一个UIImageView,带有约束left: 0, top: 0, right: 0, height: 200

在下面我有一个UITextView 约束left: 0, top: 0, right: 0, bottom: 0

这意味着UITextView 将根据其内容调整大小,我将UITextViewscrollingEnabled 设置为false

所以,当我跑步时,它几乎完美运行。

一个问题是UIImageView 比实际屏幕宽度多出大约 10%。因此,启用了水平滚动。

我已尝试添加行

imageView.frame = CGRect(0, 0, screenSize.width, 200)
scrlView.contentSize.width = screenSize.width

但这没有区别。我仍然可以水平滚动,并且 Image View 仍然比实际屏幕宽度多出 10% 左右。

注意,我没有在情节提要中设置 imageView 屏幕宽度,仅以编程方式设置。

有什么想法吗?

【问题讨论】:

  • 这样做scrlView.contentSize.width = 0;
  • 我过去多次遇到同样的问题。我解决了在 scrollView 中使用 contentview 的问题。我建议在 scrollView 中使用 uiview 作为 contentview。基本点是 contentView 的宽度应该等于 scrollView 的宽度。您所有的 imageview textview 等都必须在内容视图中。
  • 如果滚动视图的contentsize.width <= width 通常滚动视图不会滚动,因此如果您不想进行任何计算,请安全地设置contentsize.width = 0;,这肯定会消除滚动。

标签: ios swift uiscrollview


【解决方案1】:

你可以使用

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.x = 0
}

不要像其他人提到的那样使用 scrollView.contentOffset.x 0,因为它只会停止水平滚动到一侧,而不是同时停止滚动。

【讨论】:

    【解决方案2】:

    这样,

    Swift 4.0

    func scrollViewDidScroll(scrollView: UIScrollView) {
        if scrollView.contentOffset.x>0 {
            scrollView.contentOffset.x = 0
        }
    }
    

    而且,你可以设置这个属性:

    scrollImg.isDirectionalLockEnabled = true
    

    【讨论】:

    • 完美,它适用于第一个功能。 directionLockEnabled 是做什么的?
    • 其实滚动已经停止了,但是imageView还是太大了
    • 你也应该加上scrollView.contentOffset.x < 0,否则很好回答。
    • 我对这个解决方案只有一个问题。当我尝试水平滚动时,它不会滚动,但它也会阻止垂直滚动大约一秒钟。有人知道这个的解决方案吗?
    • 这绝对应该是 HunterCopp 下面的答案 (!= 0),否则可以斜向横向滚动(上/下)。
    【解决方案3】:

    我改变了它,让它只返回 0。如果你想滚动,根本不需要检查。

    func scrollViewDidScroll(scrollView: UIScrollView) {
        scrollView.contentOffset.x = 0
    }
    

    不需要方向锁。

    【讨论】:

    • 比 Loxx 的答案更好
    • 很好的答案!
    【解决方案4】:

    斯威夫特 4

    水平滚动锁

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

    您可以将 x 更改为 y 以进行垂直滚动。

    确保像这样添加 UIScrollViewDelegate:

    class MyViewController: UIViewController, UIScrollViewDelegate {
    
        @IBOutlet var scrollView: UIScrollView!
    
        ...
    }
    

    并为 ScrollView 设置委托

    scrollView.delegate = self
    

    【讨论】:

      【解决方案5】:
      func scrollViewDidScroll(_ scrollView: UIScrollView) {
          scrollView.contentOffset.x = 0
      }
      

      这也会阻止滚动视图向前沿滚动。

      【讨论】:

        【解决方案6】:

        如果您正在使用情节提要和自动布局,那么您应该考虑 ScrollView 如何在情节提要中使用自动布局。

        考虑以下内容。

        1. 在带有约束的滚动视图上添加单个视图 左、右、上、下、高、宽、

        2. 制作出口的宽高

        3. 将您的子视图添加到您在滚动视图中添加的视图中

        将宽度更新为 screenSize,例如:iPhone5 或 4 为 320。

        self.viewWidth = SCREEN_WIDTH;
        [self.view updateConstraints];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-06
          • 2013-01-31
          • 1970-01-01
          • 2012-10-21
          • 2015-12-07
          • 2012-03-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多