ios - 使用自动布局禁用 UIScrollView 中的水平滚动

标签 ios iphone swift uiscrollview autolayout

我想创建只有垂直滚动的 View 。事实证明,在 iO 中很难做到这一点。我已经完成了这些步骤:

1) 在 Storyboard中创建 UIViewController;

2) 在 UIViewController 中的 View 内添加 ScrollView,并向每一侧添加 0 个约束。

3)在scrollview中添加元素,结果: enter image description here

在我启动我的应用后一切正常,但是:

1) 我应该如何禁用水平滚动?我在 scrollView 的右侧添加了 0 个约束 + 在 uilabel 的右侧添加了 0 个约束(正如你在屏幕上看到的那样,由于某些原因它没有附加到右侧,它有不同的约束,但在属性中我设置了 constrain = 0)而且,正如我所想,标签文本应该在我的屏幕范围内,但是当我启动应用程序时我可以向右滚动,即可用文本没有换行,我的 ScrollView 只是调整大小以适合文本。我试图设置我的 ScrollView 在代码中:scrollView.contentSize = CGSize(UIScreen.mainScreen().bounds.width, height: 800),但没有帮助。

2) 如果我滚动太多,然后出现空白,这很不酷,如何解决?

最佳答案

1) 当scrollView内容宽度大于scrollView宽度时自动启用水平滚动。因此,为了避免水平滚动,需要让scrollView内部内容的宽度小于或等于scrollView的宽度。

Leading spacetrailing space 无法为 View 设置特定的宽度,它们只是拉伸(stretch)它们。在常规 View 中,它们不会拉伸(stretch)超过 View 宽度,但 scrollView 是一种特殊 View ,实际上具有无限的内容宽度。因此,scrollView 中的 trailing spaceleading space 约束将 View 的宽度更改为其最大可能值(如果使用 UILabel,您可以看到调整大小以适合文本)。

为了避免水平滚动,需要设置每个 View 的特定宽度,小于或等于 scrollView 的宽度。可以使用 width constraints 设置特定的 View 宽度。

与其设置每个 View 的宽度,不如添加一个 View 容器并为其设置宽度,然后根据需要在其中放置 View 。

View 层次结构:

View
    -> ScrollView
        -> ContainerView
            -> UILabel
            -> UILabel
            -> ... other views that you need

自动布局约束:

ScrollView
    -> leading space to View : 0
    -> trailing space to View : 0
    -> top space to View : 0
    -> bottom space to View : 0

Container View
    -> leading space to ScrollView : 0
    -> trailing space to ScrollView : 0
    -> top space to ScrollView : 0
    -> bottom space to ScrollView : 0
    -> width equal to ScrollView : 0

设置宽度相等约束 ctrl+从containerView拖动到scrollView

width equal constraint

2) 垂直滚动取决于内容的总高度。如果 containerView 中的最后一个元素具有较大的 bottom space to superview 值,则可以使用空格。

或者你的意思是反弹效果?您可以禁用 scrollView 的垂直弹跳。

关于ios - 使用自动布局禁用 UIScrollView 中的水平滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32521625/

相关文章:

ios - Swift firebase 文件上传

ios - 加载 ICarousel 的 MPMovieControl 无法正常工作

ios - UITapGestureRecognizer 快速对 UIImageView 进行操作

ios - 设置数据库中索引值的数组

iphone - OAuth登录后获取用户信息

ios - iMessage 游戏 - 发送隐藏值

iphone - 未调用 didFailToReceiveAdWithError

iPhone UI图像号码识别

iOS swift : Open Mail app in inbox emails

ios - 如何在 Swift 3.0 中一段时间​​后插入警报