iOS9新特性-UIStackView

什麼是UIStackView?

  在iOS9中蘋果在UIKit框架中引入了一個新的視圖類UIStackViewUIStackView類能夠幫咱們佈局UI控件,而咱們不須要設置任何約束或設置不多的約束就能夠,其餘都由UIStackView幫咱們自動完成了。數組

  UIStackView提供了兩個方向的約束,垂直佈局和水平佈局,咱們能夠經過UILayoutConstraintAxis枚舉值來查看兩種佈局方式。框架

  若是初學者來學習UIStackView比較抽象,不太好接觸這個新的控件,並且很容易出錯,先看一下下面這個GIF來初步瞭解一下這個控件吧。佈局

  

UIStackView

  在Interface Builder中使用UIStackView就相似於使用一個UI控件同樣,經過讓將其餘視圖成爲UIStackView的子視圖來進行佈局的,UIStackView也能夠嵌套多個UIStackView學習

  值得注意的是,UIStackView雖然繼承自UIView,可是並不參與屏幕的渲染,重寫drawRect:方法也是無效的。ui

  UIStackView繼承鏈條,自身特性等信息

   

枚舉值

  Interface Builder中的UIStackView控件,右側設置面板中提供了一些選項,這些設置是對應着代碼中的枚舉值的:spa

  • Axis
    Horizontal -> UILayoutConstraintAxisHorizontal
    水平方向佈局
    Vertical -> UILayoutConstraintAxisVertical
    垂直方向佈局
  • Distribution
    Fill -> UIStackViewDistributionFill
    填充整個UIStackView,而且根據內部子視圖尺寸對子視圖尺寸進行動態調整。
    Fill Equally -> UIStackViewDistributionFillEqually
    根據視圖大小平均分配UIStackView尺寸,等比例填充UIStackView,過程當中會根據分配的大小改變子視圖尺寸。
    Fill Proportionally -> UIStackViewDistributionFillProportionally
    根據以前的比例填充UIStackView
    Equal Spacing -> UIStackViewDistributionEqualSpacing
    填充整個UIStackView,子視圖沒有佔滿UIStackView將會用空白平均填充子視圖中間的間距,超出UIStackView將會根據arrangedSubviews數組下標壓縮子視圖。
    Equal Centering -> UIStackViewDistributionEqualCentering
    平均分配子視圖獲得每一個視圖的中心點,使用這個中心點來佈局每一個子視圖,而且保持spacing距離,超出將會從新佈局子視圖,並壓縮部分子視圖。
  • Alignment
    Fill -> UIStackViewAlignmentFill
    視圖縱向填充
    Top -> UIStackViewAlignmentTop
    視圖向上對其(適用於Horizontal模式)
    Center -> UIStackViewAlignmentCenter
    視圖居中對其
    Bottom -> UIStackViewAlignmentBottom
    視圖向下對其(適用於Horizontal模式)
    First Baseline -> UIStackViewAlignmentFirstBaseline
    根據上方基線佈局全部子視圖的y值(適用於Horizontal模式)
    Last Baseline -> UIStackViewAlignmentLastBaseline
    根據下方基線佈局全部子視圖的y值(適用於Horizontal模式)
    trailing -> UIStackViewAlignmentTrailing
    視圖向左對齊(適用於Vertical模式)
    leading -> UIStackViewAlignmentLeading
    視圖向右對齊(適用於Vertical模式)
  • spacing
    spacing -> CGFloat spacing
    子控件之間的最小距離

    能夠根據下面的圖片結合上面的枚舉值聯繫起來比較好理解code

arrangedSubviews數組

  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中。能夠選擇HorizontalVertical兩個方向的UIStackView,也能夠在拖到XIB中以後手動修改。圖片

  而後將兩個View拖到這個UIStackView中,父視圖也能夠將UIStackView做爲子視圖來進行多層UIStackView嵌套,這也是蘋果推薦的作法。

  打開右側設置面板來設置UIStackView的一些屬性,達到更好的佈局效果。

  除了上面的方法也能夠在XIB中直接選擇多個View,而後點擊右下方的Stack按鈕,系統會自動推斷佈局方式,幫咱們自動佈局子視圖,咱們能夠在系統佈局以後在手動進行調整。

 

  代碼佈局其實本質上就是對數組進行操做,數組中存儲的是UIStackView的子視圖。而後經過設置UIStackView的枚舉值屬性進行頁面排布。代碼佈局的方式這裏就不演示了。。。😉

UIStackView和NSLayoutConstraint佈局轉換

  若是你以前的項目中已經有約束,只須要將添加UIStackView管理UI控件約束清除。選中須要添加的UI控件,點擊右下方的Stack按鈕就能夠。

  

相關文章
相關標籤/搜索