xib相關(guān)(十五) —— UIStackView之工程實(shí)踐(四)

版本記錄

版本號 時間
V1.0 2018.04.29

前言

iOS中的視圖加載可以有兩種方式,一種是通過xib加載润讥,另外一種就是通過純代碼加載转锈。它們各有優(yōu)點(diǎn)和好處,xib比較直觀簡單楚殿,代碼比較靈活但是看著很多很亂撮慨,上一家公司主要風(fēng)格就是用純代碼,這一家用的就是xib用的比較多。這幾篇我們就詳細(xì)的介紹一個xib相關(guān)知識砌溺。感興趣的可以看上面寫的幾篇影涉。
1. xib相關(guān)(一) —— 基本知識(一)
2. xib相關(guān)(二) —— 文件沖突問題(一)
3. xib相關(guān)(三) —— xib右側(cè)標(biāo)簽介紹(一)
4. xib相關(guān)(四) —— 連線問題(一)
5. xib相關(guān)(五) —— 利用layout進(jìn)行約束之界面(一)
6. xib相關(guān)(六) —— 利用layout進(jìn)行約束之說明和注意事項(二)
7. xib相關(guān)(七) —— Storyboard中的segue (一)
8. xib相關(guān)(八) —— Size Classes(一)
9. xib相關(guān)(九) —— 幾個IB修飾符(一)
10. xib相關(guān)(十) —— xib的國際化(一)
11. xib相關(guān)(十一) —— xib的高冷用法之修改視圖的圓角半徑、邊框?qū)挾群皖伾ㄒ唬?/a>
12. xib相關(guān)(十二) —— UIStackView之基本介紹(一)
13. xib相關(guān)(十三) —— UIStackView之枚舉UIStackViewDistribution使用(二)
14. xib相關(guān)(十四) —— UIStackView之UIStackViewAlignment使用(三)

回顧

上一篇主要介紹了UIStackView的對齊方式UIStackViewAlignment枚舉规伐,這一篇主要根據(jù)實(shí)際工程實(shí)踐說明UIStackView的使用蟹倾。


基礎(chǔ)準(zhǔn)備

理解幾個屬性

下面看一下基礎(chǔ)準(zhǔn)備。

  • Axis表示Stack View的subview是水平排布還是垂直排布猖闪。
  • Alignment控制subview對齊方式鲜棠。
  • Distribution定義subview的分布方式。
  • Spacing 為subview間的最小間距培慌。

你可這樣理解:Alignment 用于控制X 和 Y值岔留,而Distribution 用于控制高度和寬度。另兩個值都會影響對齊检柬。

區(qū)分兩個概念

開始使用Stack View前,我們先看一下它的屬性subViewsarrangedSubvies屬性的不同竖配。如果你想添加一個subview給Stack View管理何址,你應(yīng)該調(diào)用addArrangedSubview:insertArrangedSubview:atIndex:arrangedSubviews數(shù)組是subviews屬性的子集进胯。

要移除Stack View管理的subview用爪,需要調(diào)用removeArrangedSubview:removeFromSuperview。移除arrangedSubview只是確保Stack View不再管理其約束胁镐,而非從視圖層次結(jié)構(gòu)中刪除偎血,理解這一點(diǎn)非常重要。

需要注意的是:調(diào)用removeFromSuperview是把subview從視圖層級中移除盯漂。調(diào)用removeArrangedSubview只是告訴Stack View不再需要管理subview的約束颇玷。而subview會一直保持在視圖層級結(jié)構(gòu)中直到調(diào)用removeFromSuperview把它移除。


工程實(shí)踐

關(guān)于stackview的工程實(shí)踐就缆,可以參考下面這兩篇文章帖渠。

這篇根據(jù)那兩篇的指引,做一個這方面的類似的實(shí)踐例子竭宰。

1. 放入兩個stackview

在xib中放入兩個stackview空郊,上邊的是縱向的,下邊的是橫向的切揭。

下面對這兩個stackview進(jìn)行配置狞甚。

垂直stackview
水平stackview

設(shè)置上面stackview的約束,如下所示:

接著廓旬,設(shè)置下面stackview的約束哼审,如下所示:

設(shè)置好了下面我們就要往里面添加控件了。

2. 為上面的stackview添加控件

下面我們就為上面的stackview添加控件。從上往下一次放入UILabel棺蛛、UIImageView和UIButton三個控件怔蚌。

添加控件如下所示。

3. 增加星星

將addStar按鈕和水平的stackview連線到view中旁赊,如下所示桦踊。

下面添加代碼

- (IBAction)addStarButtonDidClick:(UIButton *)sender
{
    UIImageView *starImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"star1"]];
    [self.horizontalStackView addArrangedSubview:starImageView];
    [UIView animateWithDuration:0.25 animations:^{
        [self.horizontalStackView layoutIfNeeded];
    }];    
}

下面看一下運(yùn)行效果

運(yùn)行效果

可見下面的圖片被拉伸了。

選擇下面的Stack View终畅,查看Attributes Inspector會看到問題所在籍胯。由于Alignment 和Distribution 都設(shè)置成了Fill,Stack View 拉伸了星星以適應(yīng)其大小离福。

這在添加更多的星星的時候會引起更多問題杖狼。我們希望星星居中顯示,而不是被拉伸來適應(yīng)Stack View的寬度妖爷。

修改Alignment 的值為Center 蝶涩,修改Distribution 的值為Fill Equally

所以進(jìn)行如下設(shè)置

并添加一句代碼

starImageView.contentMode = UIViewContentModeScaleAspectFit;

下面我們看一下實(shí)際效果

可以看見實(shí)現(xiàn)了自動布局絮识。

4. 減少星星

下面我們就看一下減少星星绿聘。

首先這里涉及到一個stackview的嵌套,上面的垂直的stackview里面只有addStar一個按鈕次舌,這里我們需要在垂直stackview里面熄攘,嵌套一個水平的stackview,并將addStar和removeStar放在里面彼念。

具體配置如下所示挪圾。

下面配置新的stackview如下

下面將Remove Star!按鈕進(jìn)行連線逐沙,并添加代碼哲思。

- (IBAction)removeStarButtonDidClick:(UIButton *)sender
{
    UIImageView *starImageView = self.horizontalStackView.arrangedSubviews.lastObject;
    [self.horizontalStackView removeArrangedSubview:starImageView];
    [starImageView removeFromSuperview];
    [UIView animateWithDuration:0.25 animations:^{
        [self.horizontalStackView layoutIfNeeded];
    }];
}

運(yùn)行可以查看效果

可見,這就實(shí)現(xiàn)了簡單的視圖自動布局酱吝。

后記

本篇主要介紹了UIStackView一個簡單示例也殖,感興趣的給個贊或者關(guān)注~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市务热,隨后出現(xiàn)的幾起案子忆嗜,更是在濱河造成了極大的恐慌,老刑警劉巖崎岂,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捆毫,死亡現(xiàn)場離奇詭異,居然都是意外死亡冲甘,警方通過查閱死者的電腦和手機(jī)绩卤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門途样,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人濒憋,你說我怎么就攤上這事何暇。” “怎么了凛驮?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵裆站,是天一觀的道長。 經(jīng)常有香客問我黔夭,道長宏胯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任本姥,我火速辦了婚禮肩袍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘婚惫。我一直安慰自己氛赐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布先舷。 她就那樣靜靜地躺著鹰祸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪密浑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天粗井,我揣著相機(jī)與錄音尔破,去河邊找鬼。 笑死浇衬,一個胖子當(dāng)著我的面吹牛懒构,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耘擂,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胆剧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了醉冤?” 一聲冷哼從身側(cè)響起秩霍,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚁阳,沒想到半個月后铃绒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡螺捐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年颠悬,在試婚紗的時候發(fā)現(xiàn)自己被綠了矮燎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赔癌,死狀恐怖诞外,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灾票,我是刑警寧澤峡谊,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站铝条,受9級特大地震影響靖苇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜班缰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一贤壁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧埠忘,春花似錦脾拆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旨怠,卻和暖如春渠驼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鉴腻。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工迷扇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爽哎。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓蜓席,卻偏偏與公主長得像,于是被迫代替她去往敵國和親课锌。 傳聞我的和親對象是個殘疾皇子厨内,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容