注:本文翻译自Working with Scroll Views
当使用ScrollView时,你需要在父视图内同时定义ScrollView的尺寸和位置,额外还有ScrollView的内容区域。所有的这些特性都可以通过Auto Layout进行设置。
为了支持ScrollView,系统会基于约束所处的位置,使用不同的方式来诠释约束。
- 就像其他视图一样,在ScrollView和其外部对象之间的约束都会影响ScrollView的frame。
- 对于ScrollView和其自身内容之间的约束,其行为就会因属性的约束方式而有所不同:
- ScrollView的边界分隔和其自身内容之间的约束会影响ScrollView的内容区域。
- 高度、宽度或是中心点三者之间的约束会影响ScrollView的frame。
- 你还可以在ScrollView自身内容和ScrollView外部对象之间设置约束来为ScrollView的内容生成一个可变的位置,以便这些内容看起来就像漂浮在ScrollView上面一样。
对于大多数通常的布局来说,如果你对ScrollView的内容使用虚拟视图或是组合的方式进行布局,逻辑将会变得非常简单。当使用Interface Builder时,通常的做法如下所示:
- 在场景中添加ScrollView
- 像平常一样,设置约束来定义ScrollView的尺寸和位置。
- 添加一个视图到ScrollView上。设置该视图的Xcode指定标签到ScrollView的内容视图(即ContentView,以下直接使用)上。
- 设置ContentView的顶部、底部、头部和尾部边界到ScrollView的对应边界上。ContentView现在决定了ScrollView的内容区域。
重点:
此时ContentView还没有一个确定的尺寸。它可以拉伸或压缩来适配任何你放入的视图或控件。
- (可选)要禁止水平滑动,将ContentView的宽度设置为与ScrollView宽度相同。ContentView现在在水平方向上充满了ScrollView。
- (可选)要禁止垂直滑动,将ContentView的高度设置为与ScrollView高度相同。ContentView现在在竖直方向上充满了ScrollView。
- 将ScrollView的内容布局到ContentView内部。像往常一样,在ContentView内部使用约束来设置内容的位置。
重点:
你的布局必须完整定义了ContentView的尺寸(除了步骤5和6定义的位置)。要设置基于真实内容尺寸视图的ContentView的高度,你必须从ContentView的顶部到底部设置一个未被打破(broken)的约束和视图链。相似的,要设置该ContentView的宽度,你就必须从ContentView的头部到尾部设置一个未被打破(broken)的约束和视图链。
如果你的内容控件没有真实内容尺寸,你就必须添加合适的尺寸约束,或者是设置ContentView的,或者就设置内容的。
当ContentView比ScrollView高时,ScrollView在竖直方向上便可以滑动了。当ContentView比ScrollView宽时,ScrollView在水平方向上就可以滑动了。否则,默认来说ScrollView的滑动是被禁止的。








网友评论