从 UIScrollView 禁用水平滚动 Swift

Disabling Horizontal Scrolling from UIScrollView Swift

滚动视图

我有一个 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

但这没有区别。我仍然可以水平滚动,图像视图仍然比实际屏幕宽度多 10%。

请注意,我没有在故事板中设置 imageView 屏幕宽度,只是通过编程设置。

有什么想法吗?

像这样,

Swift 4.0

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

并且,您可以设置此 属性:

scrollImg.isDirectionalLockEnabled = true

如果您正在使用故事板和自动版式,那么您应该考虑 ScrollView 如何在带有自动版式的故事板中工作。

考虑以下因素。

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

  2. 制作宽高的出口

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

将宽度更新为 screenSize 例如:iPhone5 或 4.

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

我将其更改为 returns 0。如果您想关闭滚动条,则根本无需检查。

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

不需要方向锁

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

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

Swift 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

您可以使用

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

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