ScrollView的分页显示与PageControl

这周简单的做了一个ScrollView的分页显示与PageControl联合起来的小demo这要涉及到了这些知识,记录一下.

UIScrollView 属性:

contentSize

scroll view 的 content size 并不会改变其 bounds 的任何东西,所以这并不会影响 scroll view 如何组合自己的子视图。反而,content size 定义了可滚动区域。scroll view 的默认 content size 为 {w:0, h:0}。既然没有可滚动区域,用户是不可以滚动的,但是 scroll view 仍然会显示其 bounds 范围内所有的子视图。 当 content size 设置为比 bounds 大的时候,用户就可以滚动视图了。你可以认为 scroll view 的 bounds 为可滚动区域上的一个窗口

content offset

content offset的最大值是 content size 和 scroll view size 的差(不同于 content size 和scroll view的 bounds 大小)。这也在情理之中:从左上角一直滚动到右下角,用户停止时,滚动区域右下角边缘和滚动视图 bounds 的右下角边缘是齐平的。你可以像这样记下 content offset 的最大值:

 contentOffset.x = contentSize.width - bounds.size.width;
 contentOffset.y = contentSize.height - bounds.size.height;

注:以上的这些来自片段来自https://objccn.io/issue-3-2/
自己在看了这篇文章后对ContentSize 和 Content offset 有了很好的认识,需要的话可以去看看

AutoLayout 下的UIScrolView

这个其实是很困扰我的一件事情,因为如果想要使用自动布局.那么我们就应该知道.以前的frame bounds 这些View属性都已经离我们远去了.刚开始的时候.我在使用了AutoLayout的情况下,在ViewDidLoad中尝试去初始化我的ContentSize(使用frame,bounds)结果失败了.后来我Google之后发现.当我们在storyboard 中设置好约束的时候,我们必须要让scrollvIew推断出他的content size的大小
接下来我以自己写的一个小的demo为例演示一下

添加ScrollView与约束

ScrollView的约束就和普通的view的约束一样,放到合适的位置就可以,这里不再细说

给ScrollView添加subView

如果你想要让storyboard判断出你的ScrollView的ContentSize 有多大,你就必须给ScrollView添加一个subView.然后在subView上面放你想要滚动的view

ScrollView的分页显示与PageControl_第1张图片
层次结构

我这里的ScrollView的层次结构就是这个样子.解释一下,因为我想要做的是和图片相关的一些东西所以这里用StackView把这些包装起来.你可以在子View上放任何的东西.前提是你需要让你的ScrollView推断出Content Size 的大小.

接下来重点来了,如何能推断出他的ContentSize?

我想先展示一下我的stackview


ScrollView的分页显示与PageControl_第2张图片
我的StackView

看见这些蓝线了么 这就是我的StackView的大小,也就是我的ContentSize的大小.

如何约束?

我在ScrollView的subview上添加了stackView 但是你可以看到的是我的stackview居然比我的subview还要大

ScrollView的分页显示与PageControl_第3张图片
StackView的约束

最最重点的就是width 和 height 这两个约束,让我的stackView变得如此的大,但是他相对于subview 你可以看到,并没有左右方向的约束.只是上下的约束.因为我想要实现的是左右滑动,这样我们就实现了ContentSize的自动推断.你在设置subview中的子view的大小的时候,要保证子view的大小可以推断出content size 的大小.这就是最最重点的地方

接下来我们看看subView的约束

设置好了contentsize的大小之后,我们回过头来看看subview的约束

ScrollView的分页显示与PageControl_第4张图片
屏幕快照 2016-09-12 上午11.10.51.png

subview的约束中width 这个约束是非常关键的地方,一定要比你的scrollview的width要大

如果比scrollview的width的宽度还小的话.你的ScrollView很有可能滚动不起来!!!!!
如果比scrollview的width的宽度还小的话.你的ScrollView很有可能滚动不起来!!!!!
如果比scrollview的width的宽度还小的话.你的ScrollView很有可能滚动不起来!!!!!

所以你在设置的时候一定要记得ScrollView即使已经推断出来了content size的大小,但是如果你的subview想要滚动起来,那就必须要让你的subview的宽度,或者高度比你的ScrollView大一些.这样才能滚动起来

总结

这就是我想要分享给大家的一些ScrollView和AutoLayout的一些有关的方法.一定记得如何判断出content size 的大小和怎样才能让视图滚动起来.

你可能感兴趣的:(ScrollView的分页显示与PageControl)