Stack View提供橫向和縱向的線性布局功能美旧,管理著所有在它的 arrangedSubviews數(shù)組中的所有子視圖鼎文,會(huì)自動(dòng)對(duì)這些子視圖進(jìn)行布局處理渔肩。
屬性
stackView中的布局情況是根據(jù)其axis,alignement,distribution,spacing等其他屬性共同決定。
a. Axis:stackview布局的軸向拇惋,分為垂直和水平
b. Alignment:決定了Stack View如何沿它軸向的垂直方向擺放它的subview,水平軸向和垂直軸向會(huì)有所不同周偎。
UIStackViewAlignment | 含義 | 展示 |
---|---|---|
UIStackViewAlignmentFill | 在StackView軸向的垂直方向上拉伸所有子view來(lái)填充StackView | |
UIStackViewAlignmentLeading | 用于stackview是垂直軸向時(shí)抹剩,所有子view靠左對(duì)齊 | |
UIStackViewAlignmentTop | 用于stackview是水平軸向時(shí),所有子view靠頂部對(duì)齊 | |
UIStackViewAlignmentCenter | 在StackView軸向的垂直方向上子視圖以中線為基準(zhǔn)對(duì)齊 | |
UIStackViewAlignmentTrailing | 用于stackview是垂直軸向時(shí)蓉坎,所有子view靠右對(duì)齊 | |
UIStackViewAlignmentBottom | 用于stackview是水平軸向時(shí)澳眷,所有子view靠底部對(duì)齊 | |
UIStackViewAlignmentFirstBaseline | 用于stackview是水平軸向時(shí),按照第一個(gè)子視圖中文字的第一行對(duì)齊 | |
UIStackViewAlignmentLastBaseline | 用于stackview是水平軸向時(shí)蛉艾,按照最后一個(gè)子視圖中文字的最后一行對(duì)齊 |
c. Distibution:決定子視圖的分布比例
UIStackViewDistribution | 含義 | 展示 |
---|---|---|
UIStackViewDistributionFill | 默認(rèn)钳踊,在StackView軸向延伸方向上縮放子View,使得所有子View能填充完StackView勿侯,如果子Views超出StackView拓瞪,根據(jù)其compression resistance 優(yōu)先級(jí)進(jìn)行壓縮;如果子Views不能填充完StackView助琐,根據(jù)于其hugging優(yōu)先級(jí)進(jìn)行放大祭埂;如果相等的話,則按照arrangedSubviews數(shù)組中index順序 | |
UIStackViewDistributionFillEqually | 在StackView延伸方向上使每個(gè)子View都一樣長(zhǎng) | |
UIStackViewDistributionFillProportionally | 在StackView延伸方向上根據(jù)子View的實(shí)際內(nèi)容按比例進(jìn)行縮放 | |
UIStackViewDistributionEqualSpacing | 在StackView延伸方向上將子Views間隔相等的空白進(jìn)行縮放兵钮,如果子Views不能填充完StackView蛆橡,則用空白填充子views之間;如果子Views超出StackView掘譬,則根據(jù)compression resistance優(yōu)先級(jí)進(jìn)行壓縮航罗;如果相等的話,則按照arrangedSubviews數(shù)組中index順序 | |
UIStackViewDistributionEqualCentering | 在StackView延伸方向上將子Views的中心線等距進(jìn)行縮放屁药,如果子View不能填充完StackView粥血,則用空白填充子views之間;如果子View超出StackView酿箭,先縮小子views間隔直到其spacing屬性定義的最小值复亏;若還是超出,則根據(jù)compression resistance優(yōu)先級(jí)進(jìn)行壓縮缭嫡;如果相等的話缔御,則按照arrangedSubviews數(shù)組中index順序 |
d. Spacing:決定子視圖的間隔距離
e. 如下圖是 水平軸向的stackview屬性標(biāo)注
實(shí)現(xiàn)
stroyboard中利用stackview
-
效果展示
-
屏幕適配Size Classes
將屏幕橫過(guò)來(lái)效果并不是很好,可以借用size classes實(shí)現(xiàn)成這樣:
sizeclass是對(duì)設(shè)備的一種抽象妇蛀。它不再有尺寸耕突、橫屏和豎屏的概念,把設(shè)備分為緊湊Compact评架、普通Regular眷茁,ios設(shè)備和對(duì)應(yīng)的size classes如下圖:
ipad是 regular width + regular height
橫屏的iphone 6 Plus是 regular width + compact height
豎屏的iphone是 compact width + regular height
橫屏的iphone是 compact width + compact height
所以實(shí)現(xiàn)上述效果需要在compact height時(shí),stackview的由垂直軸向改為水平纵诞,如下圖所示
ios7兼容
官方的UIStackView是在iOS9以上系統(tǒng)才可以可以使用上祈,但是有開(kāi)源代碼提供了ios7以上的系統(tǒng)實(shí)現(xiàn)了相應(yīng)的功能:
OAStackView 基于objective-c實(shí)現(xiàn)
TZStackView 基于swift實(shí)現(xiàn)