參考:
相對于Masonry,SD_layout不是對原生的autoLayout進行的封裝喉誊。
太細的的東西就不累贅了,僅發(fā)表一些自己看法。
1.第一點要注意的是衣赶,一定要先addSubView才能設置其sd_layout約束,舉個例子:
先約束后add會不起作用的厚满。
2.第二點就是關于自適應撐大父view了府瞄,如果是用原生的autolayout ,則可通過不設父view的高(即不給定高)碘箍,然后通過降低父view與子view的優(yōu)先級來實現(xiàn)遵馆,如果是sd_layout的話,除了不設高這點一樣之外丰榴,關鍵是下面這一句:
[_superView setupAutoHeightWithBottomView:_subView bottomMargin:0];
至于這個bottomMargin一般來講可以設置為0货邓,要用也可以,不過貌似是外邊距來的
例子四濒,
子控件中有自適應高度的
然后父視圖根據(jù)最下面的那個子控件换况,注意是撐大父視圖喔职辨。
(先內容后“撐大”,只有這樣才能拿到最下面的那個子view戈二,弱弱地提一下)
當然上面只是最簡單的布局方式舒裤,看起來也不難,但是去到復雜的視圖觉吭,多層嵌套父視圖的時候腾供,容易出現(xiàn)混亂考慮不周而導致的錯誤,比如
都是“父視圖”亏栈,但是因為_baseInfoHolderView之前就跟_bannerHolderView產生約束聯(lián)系了台腥,后面才add到二級父視圖就會有問題,(約束混亂了)
所以绒北,為了避免這種亂七八糟的大小父視圖黎侈,造成的混亂,一般來講闷游,提前一點峻汉,把大小父視圖之間的從屬關系先add了能避免很多問題(子控件因為有單獨add了,所以大小父視圖先add其實一般來講脐往,子控件沒啥影響)
ps:
連著來“撐大”
ps:比較重要的細節(jié)
rightEqualToView(holderView)的意思等同holderView的右邊休吠。
rightSpaceToView(holderView,0)的意思等同holderView的左邊。至于正負數(shù)值嘛业簿,這東西要相對而言瘤礁,比如
我們取當前要設置frame的view作為參照點,簡稱:當view梅尤。
rightSpaceToView(holderView,-10)
即當view就會遮住holderView柜思,10。即當view向holderView內邊距方向延伸10巷燥。
rightSpaceToView(holderView,10)赡盘。即當view與holderView間隔10。