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

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

作者: 游龙飞雪 | 来源:发表于2020-07-08 22:34 被阅读0次

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);

}];

image

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

当然,上面的布局方法是一种水平方向和竖直方向全动态的。也就是说这两个方向都会随内容而自动撑开大小。

下面就介绍另一种,水平或者竖直某一个方向自动撑开,另一个方向固定的方法:

(1)水平固定,竖直方向自动撑开


[vsize mas_makeConstraints:^(MASConstraintMaker *make) {

          make.edges.mas_equalTo(self.svInfo);

          mark.top.equalTo(self.svInfo); //上方固定

          make.left.right.equalTo(self.svInfo); //左右固定(宽度固定)

}];

(2)水平方向自动撑开,竖直方向固定


[vsize mas_makeConstraints:^(MASConstraintMaker *make) {

          make.edges.mas_equalTo(self.svInfo);

          make.left.equalTo(self.svInfo); //左侧固定

          make.top.bottom.equalTo(self.svInfo); //上下固定(高度固定)

}];

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

--

相关文章

网友评论

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

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