参考:
相对于Masonry,SD_layout不是对原生的autoLayout进行的封装。
太细的的东西就不累赘了,仅发表一些自己看法。
1.第一点要注意的是,一定要先addSubView才能设置其sd_layout约束,举个例子:
先约束后add会不起作用的。
2.第二点就是关于自适应撑大父view了,如果是用原生的autolayout ,则可通过不设父view的高(即不给定高),然后通过降低父view与子view的优先级来实现,如果是sd_layout的话,除了不设高这点一样之外,关键是下面这一句:
[_superView setupAutoHeightWithBottomView:_subView bottomMargin:0];
至于这个bottomMargin一般来讲可以设置为0,要用也可以,不过貌似是外边距来的
例子,
子控件中有自适应高度的
然后父视图根据最下面的那个子控件,注意是撑大父视图喔。
(先内容后“撑大”,只有这样才能拿到最下面的那个子view,弱弱地提一下)
当然上面只是最简单的布局方式,看起来也不难,但是去到复杂的视图,多层嵌套父视图的时候,容易出现混乱考虑不周而导致的错误,比如
都是“父视图”,但是因为_baseInfoHolderView之前就跟_bannerHolderView产生约束联系了,后面才add到二级父视图就会有问题,(约束混乱了)
所以,为了避免这种乱七八糟的大小父视图,造成的混乱,一般来讲,提前一点,把大小父视图之间的从属关系先add了能避免很多问题(子控件因为有单独add了,所以大小父视图先add其实一般来讲,子控件没啥影响)
ps:
连着来“撑大”
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。