iOS 9中增加了新的控件:UIStackView,看下圖就明白作用了生蚁。
UIStackView 類提供了一個(gè)高效的接口用于平鋪一行或一列的視圖組合。Stack視圖使你依靠自動(dòng)布局的能力戏自,創(chuàng)建用戶接口使得可以動(dòng)態(tài)的調(diào)整設(shè)備朝向邦投、屏幕尺寸及任何可用范圍內(nèi)的變化。Stack視圖管理著所有在它的 arrangedSubviews 屬性中的視圖的布局擅笔。這些視圖根據(jù)它們?cè)?arrangedSubviews 數(shù)組中的順序沿著 Stack 視圖的軸向排列志衣。精確的布局變量根據(jù) Stack 視圖的 axis, distribution, alignment, spacing, 和其它屬性共同決定。
使用 stack 視圖猛们,打開(kāi)一個(gè)你希望編輯的 Storyboard念脯,從對(duì)象庫(kù)中拖拽出一個(gè) Horizontal Stack View 或者一個(gè) Vertical Stack View,并放置到你希望的位置上弯淘。下一步绿店,將控件或視圖拖拽放置到 stack 中,如果需要你可以繼續(xù)添加視圖或者控件給指定的 stack庐橙。Interface Builder 將根據(jù) stack 的內(nèi)容自動(dòng)調(diào)節(jié)尺寸假勿。你也可以通過(guò)修改屬性面板中 Stack視圖的屬性調(diào)整 stack 內(nèi)容的外觀。
注意:你需要負(fù)責(zé)指定 stack 視圖的位置和尺寸(可選的)态鳖。然后 stack 視圖將管理其內(nèi)容的布局和尺寸转培。
UIStackView 是 UIView 的非渲染型子類。它沒(méi)有提供其自有的任何用戶接口浆竭。相反的堡距,它只管理被其管理的視圖的位置和尺寸。因此兆蕉,有些屬性(如 backgroundColor)在 stack 視圖上是無(wú)效的。類似的缤沦,你無(wú)法重寫 layerClass虎韵,drawRect: 或 drawLayer:inContext: 方法。
這里有一系列的屬性來(lái)定義 stack 視圖如何平鋪其內(nèi)容缸废。
· axis(軸向) 屬性決定了 stack 的朝向包蓝,只有垂直或水平;
· distribution(分布) 屬性決定了其管理的視圖在沿著其軸向上的布局企量;
· alignment(對(duì)齊) 屬性決定了其管理的視圖在垂直于其軸向上的布局测萎;
· spacing(空隙) 屬性決定了其管理的視圖間的最小間隙;
· baselineRelativeArrangement 屬性決定了其視圖間的垂直間隙是否根據(jù)基線測(cè)量得到届巩;
· layoutMarginsRelativeArrangement 屬性決定了 stack 視圖平鋪其管理的視圖時(shí)是否要參照它的布局邊距
通常情況下硅瞧,你會(huì)使用一個(gè) stack 視圖來(lái)布局小數(shù)量的視圖。你可以通過(guò)在其他 stack 視圖中嵌套多個(gè) stack 視圖的方式創(chuàng)建更加復(fù)雜的視圖層次結(jié)構(gòu)恕汇。舉例腕唧,F(xiàn)igure 5展示了一個(gè)包含兩個(gè)水平 stack 視圖的垂直 stack 視圖或辖。每一個(gè)水平 stack 視圖各包含一個(gè)標(biāo)簽和一個(gè)文本框。
Stack 視圖確保它的 arrangedSubviews 屬性將一直是其 subviews 屬性的子集合枣接。明確的說(shuō)颂暇,stack 視圖強(qiáng)制實(shí)施了以下規(guī)定:
· 無(wú)論何時(shí) stack 視圖增加了一個(gè)視圖到它的 arrangedSubviews 數(shù)組,其也將把這個(gè)視圖作為子視圖增加但惶,如果還未增加的話耳鸯。
· 無(wú)論何時(shí)一個(gè)子視圖從 stack 視圖中被移除,那么 stack 視圖也將將其從 arrangedSubviews 數(shù)組中移除膀曾。
· 從 arrangedSubviews 移除一個(gè)視圖并不會(huì)將其作為子視圖移除县爬。stack 視圖將不再管理該視圖的尺寸和位置,但是該視圖仍將是視圖結(jié)構(gòu)的一部分妓肢,并且當(dāng)其可見(jiàn)的情況下仍會(huì)被渲染到屏幕上捌省。
當(dāng) arrangedSubviews 數(shù)組一直包含著 subviews 數(shù)組的子集合,這些數(shù)組間的順序仍然是獨(dú)立的碉钠。
· arrangedSubviews 數(shù)組的順序定義了展現(xiàn)在 stack 中的視圖的順序纲缓。對(duì)于水平 stack 視圖,這些視圖將以閱讀順序平鋪喊废,即較小索引的視圖在較大索引視圖的左側(cè)祝高。對(duì)于垂直 stack 視圖,這些視圖是從上到下平鋪的污筷,及較小索引的視圖在較大索引視圖的上方工闺。
· subviews 數(shù)組中的順序定義了子視圖在Z軸上是順序。如果視圖重疊瓣蛀,有較小索引的子視圖將出現(xiàn)在有較大索引的子視圖后方陆蟆。
https://developer.apple.com/reference/uikit/uistackview#//apple_ref/doc/uid/TP40015256
雖然是iOS9才出的新功能,但是難不倒廣大的開(kāi)發(fā)者 惋增,國(guó)內(nèi)iOS團(tuán)隊(duì)開(kāi)發(fā)的
FDStackView - 可以將 UIStackView 的最低支持版本拉低到 iOS6叠殷,無(wú)需配置,沒(méi)有代碼侵染诈皿,扔到工程里后直接用系統(tǒng) UIStackView 的 API 即可林束,同時(shí)兼容 Storyboard。