SD_layout使用

参考:

mark1
mark2


相对于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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容