參考:
相對于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。