SD_layout使用

参考:

mark1
mark2


相对于Masonry,SD_layout不是对原生的autoLayout进行的封装。


太细的的东西就不累赘了,仅发表一些自己看法。

1.第一点要注意的是,一定要先addSubView才能设置其sd_layout约束,举个例子:

SD_layout使用_第1张图片

先约束后add会不起作用的。

2.第二点就是关于自适应撑大父view了,如果是用原生的autolayout ,则可通过不设父view的高(即不给定高),然后通过降低父view与子view的优先级来实现,如果是sd_layout的话,除了不设高这点一样之外,关键是下面这一句:

[_superView setupAutoHeightWithBottomView:_subView bottomMargin:0];

至于这个bottomMargin一般来讲可以设置为0,要用也可以,不过貌似是外边距来的

例子,

子控件中有自适应高度的


SD_layout使用_第2张图片

然后父视图根据最下面的那个子控件,注意是撑大父视图喔。

SD_layout使用_第3张图片

(先内容后“撑大”,只有这样才能拿到最下面的那个子view,弱弱地提一下)


当然上面只是最简单的布局方式,看起来也不难,但是去到复杂的视图,多层嵌套父视图的时候,容易出现混乱考虑不周而导致的错误,比如

SD_layout使用_第4张图片

都是“父视图”,但是因为_baseInfoHolderView之前就跟_bannerHolderView产生约束联系了,后面才add到二级父视图就会有问题,(约束混乱了)

所以,为了避免这种乱七八糟的大小父视图,造成的混乱,一般来讲,提前一点,把大小父视图之间的从属关系先add了能避免很多问题(子控件因为有单独add了,所以大小父视图先add其实一般来讲,子控件没啥影响)

ps:
连着来“撑大”

SD_layout使用_第5张图片

ps:比较重要的细节

rightEqualToView(holderView)的意思等同holderView的右边。

rightSpaceToView(holderView,0)的意思等同holderView的左边。至于正负数值嘛,这东西要相对而言,比如
我们取当前要设置frame的view作为参照点,简称:当view。

rightSpaceToView(holderView,-10)
即当view就会遮住holderView,10。即当view向holderView内边距方向延伸10。

rightSpaceToView(holderView,10)。即当view与holderView间隔10。

你可能感兴趣的:(SD_layout使用)