前言
首先寫這篇文章之前祝大家週末愉快,然後自我介紹一下,我叫吳海超(WHC)在iOS領域有豐富的開發架構經驗Github以後我也會以文章的形式分享具有實戰意義的文章給大家,希望能夠給大家有所幫助。
主題
這期我想給大家講講iOS中的線性佈局,我想做過Android的朋友都熟悉線性佈局,非常好用快捷強大,而我們iOS9官方也推出了類似線性佈局的框架UIStackView,好下面我們詳細介紹這個UIStackView。
UIStackView介紹
我相信很多做iOS的同學都還沒正式開始使用這個框架吧,因為它最低支援iOS9,很顯然我們App很多都需要支援iOS7甚至iOS6。UIStackView是一種快速UI佈局框架(水平/垂直方向)根據引數自動約束子檢視,能大大提高我們開發效率。
使用UIStackView我們不需要對新增其中的子檢視新增約束了,取而代之的是你需要設定一些很有描述性的屬性,比如座標(Axis)、間隔(Spacing)、對齊(Alignment)以及分佈(Distribution )等。自然的,你可以在屬性設定皮膚上來配置,這樣你就可以通過滑鼠輕鬆的製作出在所有iOS裝置上都還不錯的使用者介面了。
下面我們看看這個使用UIStackView的例子:
實現程式碼如下:
- (void)viewDidLoad {
[super viewDidLoad];
// 建立StackView例項
UIStackView * containerView = UIStackView.new;
[self.view addSubview: containerView];
// 對StackView新增約束
containerView.whc_LeftSpace(0)
.whc_TopSpace(100)
.whc_RightSpace(0)
.whc_Height(200);
/// 設定佈局方向水平
containerView.axis = UILayoutConstraintAxisHorizontal;
/// 設定子檢視分佈StackView比例相等
containerView.distribution = UIStackViewDistributionFillEqually;
/// 設定子檢視之間間隙為10
containerView.spacing = 10;
/// 設定子檢視填充StackView
containerView.alignment = UIStackViewAlignmentFill;
/// 往StackView裡面新增4個子檢視
for (NSInteger i = 0; i < 4; i++) {
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor colorWithRed:random()%256/255.0 green:random()%256/255.0 blue:random()%256/255.0 alpha:1];
[containerView addArrangedSubview:view];
}
}複製程式碼
上面使用約束佈局庫WHC_AutoLayout
UIStackView總結
我們現在可以看到UIStackView確實給我們開發帶來了很多方便,但是它也有兩個不足的地方:
(1)由於只支援iOS9以上的系統,這讓我們相容很困難。
(2)只支援水平和垂直方向,有時候我們需要向九宮格一樣的佈局(同時具有水平和垂直方向佈局),這就有點不方便。
(3)佈局引數理解比較困難,表達不夠清楚(可能是我的問題,呵呵。。。)
WHC_StackView介紹
我根據上面3點不足我自己就開始了構造類似UIStackView的計劃名為:WHC_StackView。
首先WHC_StackView是完全基於自動佈局庫WHC_AutoLayout而開發也是其中的一個子模組,所以WHC_StackView有Swift,OC版本。
優點
(1)支援iOS6以上系統
(2)支援水平/垂直和同時水平垂直佈局(類似九宮格)
(3)支援自動分割線設定
(3)簡單清晰的引數配置
例子
- (void)viewDidLoad {
[super viewDidLoad];
WHC_StackView * stackView = [WHC_StackView new];
[self.view addSubview: stackView];
/// 一行程式碼新增約束
stackView.whc_LeftSpace(10)
.whc_TopSpace(10)
.whc_RightSpace(10)
.whc_Height(100);
/// 配置StackView
stackView.whc_Edge = UIEdgeInsetsMake(10, 10, 10, 10); // 內邊距
stackView.whc_Orientation = All; // 自動水平垂直混合佈局
stackView.whc_HSpace = 10; // 子檢視橫向間隙
stackView.whc_VSpace = 10; // 子檢視垂直間隙
stackView.whc_Column = 2; // 設定水平子檢視為2列
/// 向StackView中新增4子檢視
for (int i = 0; i < 4; i++) {
UIView * view = UIView.new;
[stackView addSubview:view];
}
/// 開始進行佈局
[stackView whc_StartLayout];
}複製程式碼
Demo
支援分割線設定的WHC_StackView(水平,垂直,水平垂直方向)
自動寬高的WHC_StackView
結束
WHC_StackView開源地址:github.com/netyouli/WH…
- 如果您在使用過程中有任何問題,歡迎issue me!
- 很樂意為您解答任何相關問題!
- 與其給我點star,不如向我狠狠地拋來一個BUG!
- 如果您想要更多的介面來自定義或者建議/意見,歡迎issue me!我會根據大家的需求提供更多的介面!
也藉此機會推薦閱讀本人其他優秀開源專案:Github
1.儲存高效能模型物件資料庫:github.com/netyouli/WH…
2.Json轉Model類Mac工具:github.com/netyouli/WH…
3.區域性監聽VC自動管理鍵盤:github.com/netyouli/WH…
4.掃描iOS/Android專案沒有使用圖片mac工具:github.com/netyouli/WH…
到了這裡非常感謝您的閱讀謝謝!