使用autolayout禁用UIScrollView中的水平滚动

Pan*_*xim 21 iphone uiscrollview ios autolayout swift

我想创建只有垂直滚动的视图.事实证明,在iOs中很难做到.我已经完成了这个步骤:

1)在故事板中创建UIViewController;

2)在UIViewController中的View中添加ScrollView,并为每一侧添加0个约束.

3)在scrollview中添加元素,结果如下: 在此输入图像描述

启动我的应用程序后,所有工作,但:

1)我应该如何禁用水平滚动?我向右侧添加0约束我的scrollView + 0约束到我的uilabel右侧(因为你在屏幕上看到它没有附加到右边,它有不同的约束,但在属性我设置约束= 0)并且,正如我所想,标签文本应该在我的屏幕边界,但是当我启动应用程序时我可以向右滚动,即可用文本没有换行,我的scrollview只是调整大小以适应文本.我试图设置我的scrollView在代码:scrollView.contentSize = CGSize(UIScreen.mainScreen().bounds.width, height: 800),但没有帮助.

2)如果我滚动到很多,那么出现空白区域,这不是很酷,如何解决?

ifa*_*fau 59

1)当scrollView中的内容宽度超过scrollView的宽度时,水平滚动自动启用.因此,为了避免水平滚动,必须使scrollView内的宽度小于或等于scrollView宽度.

Leading space并且trailing space无法为视图设置特定宽度,它们只是拉伸它们.在常规视图中,它们不会超出视图宽度,但scrollView是一个特殊视图,实际上具有无限的内容宽度.因此,trailing spaceleading space滚动型约束改变意见,其最大可能值宽度(如果用的UILabel,你可以看到大小以适合文本).

要避免水平滚动,您需要设置每个视图的特定宽度,小于或等于scrollView宽度.可以设置特定的视图宽度width constraints.

而不是设置每个视图宽度,更好的是添加视图容器并为其设置宽度,并在其内部根据需要放置视图.

视图层次结构

View
    -> ScrollView
        -> ContainerView
            -> UILabel
            -> UILabel
            -> ... other views that you need
Run Code Online (Sandbox Code Playgroud)

Autolayout约束:

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
Run Code Online (Sandbox Code Playgroud)

设置width equal constraintctrl +拖动containerViewscrollView.

宽度相等的约束

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

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