91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS9新特性之UIStackView

發布時間:2020-09-02 07:41:00 來源:腳本之家 閱讀:157 作者:路人Q 欄目:移動開發

1. UIStackView相關屬性理解

UIStackView是iOS9之后推出的,我也是第一次接觸,在學習的過程中對于其中的相關屬性,尤其是對其中的distribution幾個屬性值,一知半解的,所以特寫此文通過代碼實例理解它們每個屬性的區別。

UIStackView主要包括了四大屬性:axis、alignment、distribution、spacing。

一、axis

主要設置UIStackView布局的方向:水平方向或垂直方向。

typedef NS_ENUM(NSInteger, UILayoutConstraintAxis) {
UILayoutConstraintAxisHorizontal = 0,//水平
UILayoutConstraintAxisVertical = 1//垂直
};

二、alignment

主要設置非軸方向子視圖的對齊方式。

typedef NS_ENUM(NSInteger, UIStackViewAlignment) {
UIStackViewAlignmentFill,//子視圖填充StackView
UIStackViewAlignmentLeading,//子視圖左對齊(axis為垂直方向而言)
UIStackViewAlignmentTop = UIStackViewAlignmentLeading,//子視圖頂部對齊(axis為水平方向而言)
UIStackViewAlignmentFirstBaseline, // 按照第一個子視圖的文字的第一行對齊,同時保證高度最大的子視圖底部對齊(只在axis為水平方向有效)
UIStackViewAlignmentCenter,//子視圖居中對齊
UIStackViewAlignmentTrailing,//子視圖右對齊(axis為垂直方向而言)
UIStackViewAlignmentBottom = UIStackViewAlignmentTrailing,//子視圖底部對齊(axis為水平方向而言)
UIStackViewAlignmentLastBaseline, // 按照最后一個子視圖的文字的最后一行對齊,同時保證高度最大的子視圖頂部對齊(只在axis為水平方向有效)
} NS_ENUM_AVAILABLE_IOS(9_0);

具體顯示效果如下:

iOS9新特性之UIStackView
filliOS9新特性之UIStackView
topiOS9新特性之UIStackView
centeriOS9新特性之UIStackView
bottomiOS9新特性之UIStackView
first base lineiOS9新特性之UIStackView

三、distribution

設置軸方向上子視圖的分布比例(如果axis是水平方向,也即設置子視圖的寬度,如果axis是垂直方向,則是設置子視圖的高度)。

typedef NS_ENUM(NSInteger, UIStackViewDistribution) {
UIStackViewDistributionFill = 0,
UIStackViewDistributionFillEqually,
UIStackViewDistributionFillProportionally,
UIStackViewDistributionEqualSpacing,
UIStackViewDistributionEqualCentering,
} NS_ENUM_AVAILABLE_IOS(9_0);

下面以axis=UILayoutConstraintAxisHorizontal,

alignment=UIStackViewAlignmentCenter為例:往UIStackView中添加三個UIView,第一個UIView設為40100,第二個UIView設為8080,第一個UIView設為120*60,通過實例來說明每個屬性的區別:

(1)UIStackViewDistributionFill = 0,默認屬性,軸方向上填充UIStackView。如果axis為水平方向,則所有子視圖的寬度等于UIStackView的寬,所以如果只有一個子視圖,則子視圖的寬度就等于UIStackView的寬,如果有兩個子視圖,且優先級一樣,則會拉伸或壓縮某個子視圖,使兩個子視圖的寬度之和等于UIStackView的寬……,如果axis是垂直方向,則所有子視圖的高度等于UIStackView的高,必要時會拉伸或壓縮某個子視圖。

上面是在子視圖優先級一致的情況下,如果子視圖優先級不一致,則會按優先級從高到低設置子視圖的位置,對優先級最低的子視圖進行必要的拉伸或壓縮。

設置distribution=UIStackViewDistributionFill后顯示效果:

iOS9新特性之UIStackView

UIStackViewDistributionFill

如圖所示,由于三個子視圖的寬度之和不夠UIStackView的寬度,優先級又一致,所以第三個子視圖被拉伸了。當然,我們可以修改某個子視圖的優先級來讓其被拉伸。

(2)UIStackViewDistributionFillEqually,該屬性設置后使所有子視圖在軸方向上等寬或等高。即如果是水平方向,所有子視圖都會被必要的拉伸或壓縮,使得每個子視圖的寬度一致,原來設置的子視圖的寬度都會被忽略;如果是垂直方向,所有子視圖的高度也會保持一致,如下所示:

iOS9新特性之UIStackView

UIStackViewDistributionFillEqually

(3)UIStackViewDistributionFillProportionally 該屬性設置后會根據原先子視圖的比例來拉伸或壓縮子視圖的寬或高,如實例中三個子視圖原先設置的寬度是1:2:3,所以水平方向上顯示時,會按照這個比例進行拉伸,如下圖所示,拉伸后的寬度依然是1:2:3。

iOS9新特性之UIStackView

UIStackViewDistributionFillProportionally

(4)UIStackViewDistributionEqualSpacing 該屬性會保持子視圖的寬高,所有子視圖中間的間隔保持一致。如下圖所示,圖中子視圖的間隔(綠線所示的長度)都是一致的。

iOS9新特性之UIStackView

UIStackViewDistributionEqualSpacing

(5)UIStackViewDistributionEqualCentering 該屬性是控制所有子視圖的中心之間的距離保持一致,如下圖所示,子視圖中心點之間的間隔(綠線所示的長度)是一致的。

iOS9新特性之UIStackView

UIStackViewDistributionEqualCentering

四、spacing 該屬性控制子視圖之間的間隔大小,在distribution前三個屬性值設置的情況下,子視圖之間是沒有間隔,我們可以通過spacing屬性顯式的設置,如下圖在distribution=UIStackViewDistributionFillEqually情況下,設置子視圖間隔為10,子視圖之間間隔都為10,且子視圖依然等寬。

iOS9新特性之UIStackView

spacing=10

2.進階

我們可以從Interface Builder右側的操作面板中,選擇UIStackView控件直接拖到XIB中。可以選擇Horizontal和Vertical兩個方向的UIStackView,也可以在拖到XIB中之后手動修改。

iOS9新特性之UIStackView

然后將兩個View拖到這個UIStackView中,父視圖也可以將UIStackView作為子視圖來進行多層UIStackView嵌套,這也是蘋果推薦的做法。

iOS9新特性之UIStackView

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

iOS9新特性之UIStackView

除了上面的方法也可以在XIB中直接選擇多個View,然后點擊右下方的Stack按鈕,系統會自動推斷布局方式,幫我們自動布局子視圖,我們可以在系統布局之后在手動進行調整。

iOS9新特性之UIStackView

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

UIStackView和NSLayoutConstraint布局轉換

如果你之前的項目中已經有約束,只需要將添加UIStackView管理UI控件約束清除。選中需要添加的UI控件,點擊右下方的Stack按鈕就可以。

iOS9新特性之UIStackView

總結

以上所述是小編給大家介紹的iOS9新特性之UIStackView,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建瓯市| 额济纳旗| 澄迈县| 武隆县| 诸城市| 永城市| 中西区| 宣城市| 黄陵县| 通山县| 桃园县| 沈丘县| 库尔勒市| 虹口区| 横山县| 江口县| 刚察县| 金平| 永昌县| 文安县| 莒南县| 绿春县| 威信县| 富源县| 确山县| 岳阳县| 宝山区| 墨竹工卡县| 赣州市| 双江| 合江县| 宿迁市| 丹寨县| 尉氏县| 和田县| 兴文县| 鞍山市| 中宁县| 广灵县| 南平市| 曲松县|