在iOS9
中蘋果在UIKit
框架中引入了一個新的視圖類UIStackView
。UIStackView
類能夠幫咱們佈局UI控件,而咱們不須要設置任何約束或設置不多的約束就能夠,其餘都由UIStackView
幫咱們自動完成了。數組
UIStackView
提供了兩個方向的約束,垂直佈局和水平佈局,咱們能夠經過UILayoutConstraintAxis
枚舉值來查看兩種佈局方式。框架
若是初學者來學習UIStackView
比較抽象,不太好接觸這個新的控件,並且很容易出錯,先看一下下面這個GIF來初步瞭解一下這個控件吧。佈局
在Interface Builder
中使用UIStackView
就相似於使用一個UI控件同樣,經過讓將其餘視圖成爲UIStackView
的子視圖來進行佈局的,UIStackView
也能夠嵌套多個UIStackView
。學習
值得注意的是,UIStackView
雖然繼承自UIView
,可是並不參與屏幕的渲染,重寫drawRect:
方法也是無效的。ui
Interface Builder
中的UIStackView
控件,右側設置面板中提供了一些選項,這些設置是對應着代碼中的枚舉值的:spa
Horizontal -> UILayoutConstraintAxisHorizontal
Vertical -> UILayoutConstraintAxisVertical
Fill -> UIStackViewDistributionFill
Fill Equally -> UIStackViewDistributionFillEqually
Fill Proportionally -> UIStackViewDistributionFillProportionally
Equal Spacing -> UIStackViewDistributionEqualSpacing
Equal Centering -> UIStackViewDistributionEqualCentering
Fill -> UIStackViewAlignmentFill
Top -> UIStackViewAlignmentTop
Center -> UIStackViewAlignmentCenter
Bottom -> UIStackViewAlignmentBottom
First Baseline -> UIStackViewAlignmentFirstBaseline
Last Baseline -> UIStackViewAlignmentLastBaseline
trailing -> UIStackViewAlignmentTrailing
leading -> UIStackViewAlignmentLeading
spacing -> CGFloat spacing
能夠根據下面的圖片結合上面的枚舉值聯繫起來比較好理解code
UIStackView
使用arrangedSubviews
數組來管理子視圖。須要注意的是這個數組是一個readonly
的屬性,咱們須要調用方法對arrangedSubviews
數組進行操做。blog
初始化數組: - (instancetype)initWithArrangedSubviews:(NSArray<__kindof UIView *> *)views;
添加子視圖: - (void)addArrangedSubview:(UIView *)view;
移除子視圖: - (void)removeArrangedSubview:(UIView *)view;
根據下標插入視圖: - (void)insertArrangedSubview:(UIView *)view atIndex:(NSUInteger)stackIndex;
繼承
咱們能夠從Interface Builder
右側的操做面板中,選擇UIStackView
控件直接拖到XIB
中。能夠選擇Horizontal
和Vertical
兩個方向的UIStackView
,也能夠在拖到XIB
中以後手動修改。圖片
而後將兩個View
拖到這個UIStackView
中,父視圖也能夠將UIStackView
做爲子視圖來進行多層UIStackView
嵌套,這也是蘋果推薦的作法。
打開右側設置面板來設置UIStackView
的一些屬性,達到更好的佈局效果。
除了上面的方法也能夠在XIB
中直接選擇多個View
,而後點擊右下方的Stack
按鈕,系統會自動推斷佈局方式,幫咱們自動佈局子視圖,咱們能夠在系統佈局以後在手動進行調整。
代碼佈局其實本質上就是對數組進行操做,數組中存儲的是UIStackView
的子視圖。而後經過設置UIStackView
的枚舉值屬性進行頁面排布。代碼佈局的方式這裏就不演示了。。。😉
若是你以前的項目中已經有約束,只須要將添加UIStackView
管理UI控件約束清除。選中須要添加的UI控件,點擊右下方的Stack
按鈕就能夠。