美文网首页收藏ios
iOS scrollView布局技巧之二 - 纯代码布局

iOS scrollView布局技巧之二 - 纯代码布局

作者: 游龙飞雪 | 来源:发表于2016-12-09 14:32 被阅读412次

    scrollView 纯代码布局。

    - 纯代码布局分为两种情况

    ------①scrollView 的子控件有着固定的bounds;

    ------②scrollView 的子控件使用自动布局设置约束,其大小尺寸会随数据变化。

    (不管以上那种情况,scrollView本身的frame一定要设置ok,可以使用frame直接设置,也可以使用自动布局设置。)

    ---------------------------------------------------------------------

    ==case 1:子控件的 bounds 固定

    已经说过,scrollView之所以能够滚动,是其contentOffset的功劳。所以关于scrollView的纯代码布局,还是分为两种:

    第一种是直接设置scrollView本身的contentOffset。

    第二种可以理解为分为三步:

    - step1,设置scrollView本身的大小;

    - step2,设置它的内容比它本身大,也就是size;

    -step3,设置它的四边(Edges)到它内容视图的四边相等。

    那么问题来了,如果我们给一个scrollView塞进去很多小的视图,如何确定其view们的四边?这里有一个技巧,就是给scrollView添加一个唯一直接子视图。啥意思呢,通俗点说就是创建一个view设置其大小(直接设置frame或者使用autolayout设置皆可),然后将其添加到scrollView的子视图,其他七七八八的所有小子视图都添加在这个直接子视图中,这个直接子视图就相当于contentView。这样只要设置这个直接子视图的大小和约束就好了。

    再加一句,scrollView遇到导航栏的时候,会默认下移64,即scrollView的contentOffsetY + 64 (经测试知其高度不变,很多情况下会包含64,所以要根据实际情况设置“直接子视图”的size)。

    如果设置好了这个直接子视图的约束,那么这个直接子视图的范围就是scrollView的滚动范围喽。

    需要注意一下,scrollview必须要设置明确的大小和位置!意思就是不管是直接设置scrollview还是依赖其它控件设置,必须明确知道其位置和大小,不能跟随别的控件变化而变化,否则其直接子视图就不能确定,也就无法通过滚动来显示内部的若干控件了。

    (代码还没来得及上,待续……)

    ==case 2:子控件的 bounds 变化

    开始跟 case 1 的设置一样,先要有一个“直接子控件 vSize”;

    在 case 2 中,vSize 的控件们是通过自动布局约束的,反映到 vSize 上就是 vSize 的尺寸不固定。

    so,此时对 vSize 的布局为(直接上代码):

    [vsize mas_makeConstraints:^(MASConstraintMaker *make) {

              make.edges.mas_equalTo(self.svInfo);

              make.left.equalTo(self.svInfo);

              make.centerY.equalTo(self.svInfo);

    }];

    这里像这样给一个 left,一个 centerY;高度 height 可以自适应,right 也可以自适应,对 scrollView 的滚动和滚动范围都没有影响!

    如此设置布局是不是很方便呢?

    相关文章

      网友评论

        本文标题:iOS scrollView布局技巧之二 - 纯代码布局

        本文链接:https://www.haomeiwen.com/subject/rqwemttx.html