我想创建只有垂直滚动的 View 。事实证明,在 iO 中很难做到这一点。我已经完成了这些步骤:
1) 在 Storyboard中创建 UIViewController;
2) 在 UIViewController 中的 View 内添加 ScrollView,并向每一侧添加 0 个约束。
在我启动我的应用后一切正常,但是:
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 space
和 trailing space
无法为 View 设置特定的宽度,它们只是拉伸(stretch)它们。在常规 View 中,它们不会拉伸(stretch)超过 View 宽度,但 scrollView 是一种特殊 View ,实际上具有无限的内容宽度。因此,scrollView 中的 trailing space
和 leading 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
。
2) 垂直滚动取决于内容的总高度。如果 containerView
中的最后一个元素具有较大的 bottom space to superview
值,则可以使用空格。
或者你的意思是反弹效果?您可以禁用 scrollView 的垂直弹跳。
关于ios - 使用自动布局禁用 UIScrollView 中的水平滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32521625/