iOS 9 提供的UIStackView簡化了布局操作,用于平鋪一行或者一列的的視圖組合,它有些像Android中的liner layout
例如:實(shí)現(xiàn)一行有三個(gè)圖片,某種情況下變成兩個(gè),只需要將三個(gè)圖片放入UIStackView ,將其中一個(gè)圖片隱藏即可實(shí)現(xiàn),無需修改任何約束
UIStackView 繼承自UIView,但其實(shí)一個(gè)視圖容器,是一個(gè)不會被渲染的UIView的子類,這意味著設(shè)置其backgroundColor和重載drawRect方法都不會產(chǎn)生任何效果,它會對它的子視圖根據(jù)一定規(guī)則自動(dòng)布局
快速了解UIStackView參考 使用Storyboard了解UIStackView
有如下幾個(gè)比較重要的屬性:
1、axis:定義subview的排布方式(水平還是垂直)
2、alignment:定義subview對齊方式
3、distribution:定義subview的分布方式
4、spacing: 定義subview間的最小間距。
axis
UILayoutConstraintAxisHorizontal = 0, 水平排布
UILayoutConstraintAxisVertical = 1 垂直排布
alignment
UIStackViewAlignmentFill,//子視圖填充StackView
UIStackViewAlignmentLeading,//子視圖左對齊(axis為垂直方向而言)
UIStackViewAlignmentTop = UIStackViewAlignmentLeading,//子視圖頂部對齊(axis為水平方向而言)
UIStackViewAlignmentFirstBaseline, // 按照第一個(gè)子視圖的文字的第一行對齊,同時(shí)保證高度最大的子視圖底部對齊(只在axis為水平方向有效)
UIStackViewAlignmentCenter,//子視圖居中對齊
UIStackViewAlignmentTrailing,//子視圖右對齊(axis為垂直方向而言)
UIStackViewAlignmentBottom = UIStackViewAlignmentTrailing,//子視圖底部對齊(axis為水平方向而言)
UIStackViewAlignmentLastBaseline, // 按照最后一個(gè)子視圖的文字的最后一行對齊,同時(shí)保證高度最大的子視圖頂部對齊(只在axis為水平方向有效)
distribution
UIStackViewDistributionFill//子視圖填滿父視圖
UIStackViewDistributionFillEqually//使所有子視圖在軸方向上等寬或等高
UIStackViewDistributionFillProportionally//根據(jù)原先子視圖的比例來拉伸或壓縮子視圖的寬或高
UIStackViewDistributionEqualSpacing//所有子視圖中間的間隔保持一致
UIStackViewDistributionEqualCentering//所有子視圖的中心之間的距離保持一致
但是我們stackView有可能沒有設(shè)置Frame,此時(shí)設(shè)置distribution還比較復(fù)雜,可以參考stackView的distribution詳解
參考文章