你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> UIStackView 看我就夠了

UIStackView 看我就夠了

編輯:IOS開發基礎

1469704388900828.png

授權轉載,作者:沒陽光的午後

介紹

UIStackView 是 iOS9新增的一個布局技術。熟練掌握相當節省布局時間。

UIStackView 是 UIView 的子類,是用來約束子控件的一個控件。但他的作用僅限於此,他不能用來呈現自身的內容,類似於 backgroundColor。當然了,這個控件相當易學,屬性只有4個。

2016-07-20-屏幕快照 2016-07-20 16.52.41.png

  • Axls: 子控件的布局方向,水平或者垂直

  • Alignment: 類似於 UILabel 的 Alignment 屬性

  • Distributlon: 子控件的大小

  • Spacing: 子控件間的間距

可以看到在屬性左邊有個加號,點開來是這樣的:

2016-07-20-屏幕快照 2016-07-20 16.57.50.png

這其實是 UIStackView 也集成了 Size Class,Size Class 是用來布局不同尺寸屏幕的。在這裡可以通過選擇不同的尺寸來更新子控件約束。

使用

接下來我們在 IB 中使用 UIStackView 來完成以下布局:

2016-07-20-屏幕快照 2016-07-20 17.23.53.png

首先上面的 ImageView 是直接做約束完成的。

然後我們可以選擇左下角的三個 Label,然後點擊右下角第一個圖標合成 UIStackView:

2016-07-20-屏幕快照 2016-07-20 17.26.30.png

因為三個 Label 間是有間距的,所以接下來我們修改 Spacing 屬性:

2016-07-20-屏幕快照 2016-07-20 17.29.29.png

這樣就很方便的做好了 UIStackView 內部子視圖的布局,然後只需要給 UIStackView 設置離左邊和下邊的約束即可,因為這個 UIStackView 內部的子視圖都是 UILabel, UILabel 都是有他自身的固有大小的,所以不需要設置4個布局。

2016-07-20-屏幕快照 2016-07-20 17.31.28.png

這樣我們就完成了左邊三個 Lable 的布局。接下來我們來布局右邊的2個控件。

還是和剛才一樣,選擇 Image 和 label,並且組成一個 UIStackView 並設置好 UIStackView 的布局約束:

2016-07-20-屏幕快照 2016-07-20 17.33.03.png

接下來布局內部子控件約束:

2016-07-20-屏幕快照 2016-07-20 17.33.34.png

做好這兩步你會發現 IB 還是報錯,這是因為 UIStackView 並不知道他內部的 image 的寬高,這時候我們可以讓 image 有他的固有大小:

2016-07-20-屏幕快照 2016-07-20 17.35.10.png

將 intrinsic Size 的屬性改為 Placeholder,這時候就解決了報錯,至此,整個 View 的約束已經做完,是不是發現比之前全部用 Auto Layout 快多了。

當然了 UIStackView 也是可以用代碼創建的。

class UIStackView : UIView {
    init(arrangedSubviews views: [UIView])
    var arrangedSubviews: [UIView] { get }
    func addArrangedSubview(view: UIView)
    func removeArrangedSubview(view: UIView)
    func insertArrangedSubview(view: UIView, atIndex stackIndex: Int) ...
}

第一個方法是用來創建一個 UIStackView 的,傳入 views 裡的數組的順序代表了 UIStackView 裡子視圖的順序。

第二個方法是用來獲得 UIStackView 裡有哪些子視圖的。

後面3個方法和 UIView 裡的方法是類似的。

看到 addArrangedSubview 和 removeArrangedSubview 你是不是想到了addSubView 和removfromSuperView。

下面有張表,可以區別這四個方法:

1469704321336287.png

從表中可以看出,添加 UIStackView 的子視圖應該用 addArrangedSubview,移除 UIStackView 某個子視圖應該用 removeArrangedSubview。

UIStackView 用來約束子視圖的屬性有以下幾個

var axis: UILayoutConstraintAxis
var distribution: UIStackViewDistribution
var alignment: UIStackViewAlignment
var spacing: CGFloat
var baselineRelativeArrangement: Bool
var layoutMarginsRelativeArrangement: Bool

這些就是使用代碼來創建 UIStackView 了。

UIStackView 還是蠻簡單的,但是功能卻十分強大。這篇文章應該能讓大家了解 UIStackView 的基本使用了。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved