序
这周简单的做了一个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的层次结构就是这个样子.解释一下,因为我想要做的是和图片相关的一些东西所以这里用StackView把这些包装起来.你可以在子View上放任何的东西.前提是你需要让你的ScrollView推断出Content Size 的大小.
接下来重点来了,如何能推断出他的ContentSize?
我想先展示一下我的stackview
看见这些蓝线了么 这就是我的StackView的大小,也就是我的ContentSize的大小.
如何约束?
我在ScrollView的subview上添加了stackView 但是你可以看到的是我的stackview居然比我的subview还要大
最最重点的就是width 和 height 这两个约束,让我的stackView变得如此的大,但是他相对于subview 你可以看到,并没有左右方向的约束.只是上下的约束.因为我想要实现的是左右滑动,这样我们就实现了ContentSize的自动推断.你在设置subview中的子view的大小的时候,要保证子view的大小可以推断出content size 的大小.这就是最最重点的地方
接下来我们看看subView的约束
设置好了contentsize的大小之后,我们回过头来看看subview的约束
subview的约束中width 这个约束是非常关键的地方,一定要比你的scrollview的width要大
如果比scrollview的width的宽度还小的话.你的ScrollView很有可能滚动不起来!!!!!
如果比scrollview的width的宽度还小的话.你的ScrollView很有可能滚动不起来!!!!!
如果比scrollview的width的宽度还小的话.你的ScrollView很有可能滚动不起来!!!!!
所以你在设置的时候一定要记得ScrollView即使已经推断出来了content size的大小,但是如果你的subview想要滚动起来,那就必须要让你的subview的宽度,或者高度比你的ScrollView大一些.这样才能滚动起来
总结
这就是我想要分享给大家的一些ScrollView和AutoLayout的一些有关的方法.一定记得如何判断出content size 的大小和怎样才能让视图滚动起来.