IOS9 Xcode7 下的布局神器 Stack Views

英文原文:An Introduction to Stack Views in iOS 9 and Xcode 7
翻 譯 :安明哲
注 明:轉(zhuǎn)載請(qǐng)保留此信息

Stack View提供了橫向和縱向的線性布局功能踩寇。當(dāng)多個(gè)view被嵌入到StackView,你不再需要去為這寫個(gè)view去定義布局約束,StackView會(huì)自動(dòng)對(duì)這些子視圖進(jìn)行布局處理磨镶,也就是說(shuō),你無(wú)需任何約束就可以讓一部分view自動(dòng)適應(yīng)所有設(shè)備(前提是這些視圖必須被放在stackview內(nèi)),當(dāng)然榨乎,這并不是說(shuō)你不需要去使用autolayout,這只是在stackview內(nèi)部而已瘫筐。

Xcode7 提供了橫向和縱向的statckview供我們使用蜜暑,直接可以在InterfaceBuilder目標(biāo)列表里面找到,你可以拖動(dòng)它們到storyboard的視圖里面去策肝,通過這節(jié)課你講很快理解我所說(shuō)的這些肛捍。

實(shí)例APP

我們首先來(lái)看看我們的demo,這節(jié)課將教會(huì)你通過Xcode7在幾分鐘內(nèi)甚至幾十秒內(nèi)完成這樣一個(gè)適用于所有設(shè)備的頁(yè)面之众。


雖然你可以通過其他方式制作出來(lái)同樣的效果拙毫,但是使用StackView制作這樣的效果一行代碼都不需要哦!

開始之前棺禾,請(qǐng)下載初始化項(xiàng)目缀蹄,你可能需要Xcode7 bate4(或更高)。

注膘婶,原文中初始項(xiàng)目在dropbox上缺前,這里的項(xiàng)目是譯者放在百度網(wǎng)盤上的。

項(xiàng)目中的圖片來(lái)自于[magdeleine.co](magdeleine.co "magdeleine.co").

添加Stack View

打開項(xiàng)目之后悬襟,添加一個(gè)StackView(縱向)到storyboard以用于包含圖片衅码。


接下來(lái),放置一個(gè)ImageView到StackView里脊岳,這個(gè)時(shí)候你會(huì)發(fā)現(xiàn)imageview自動(dòng)填充了這個(gè)stackview逝段,接下繼續(xù)拖入兩個(gè)imageview垛玻,神奇的事情發(fā)生了,stackview內(nèi)的圖片都做到了很好的自適應(yīng)奶躯。

為StackView定義布局約束

  • 設(shè)置stackview頂部帚桩,左邊和右邊的約束
  • 設(shè)置stackView的告訴和view的高度相同,然后將此布局高度修改為0.7也就是view的70%

設(shè)置StackView的屬性

在屬性欄里設(shè)置Distribution屬性為fill Equally巫糙,可以讓stackView內(nèi)的三個(gè)imageview尺寸保持相同朗儒。

設(shè)置圖片

指定圖片到imageview,他們?cè)陧?xiàng)目文件里分別為 nature-1 nature-2 nature-3,設(shè)置圖片的mode為 Aspect Fill 并且 勾選clicpSubview参淹。


現(xiàn)在你可以運(yùn)行這個(gè)程序醉锄,并且可以嘗試在不同的設(shè)備上運(yùn)行,在不同的設(shè)備上StackView會(huì)根據(jù)不同的屏幕自動(dòng)做適配浙值。

使用StackView來(lái)設(shè)置Label和button的布局

現(xiàn)在恳不,有一些label用來(lái)描述圖片信息,有兩個(gè)button用來(lái)點(diǎn)贊和分享开呐。那么首先添加兩個(gè)Label烟勋,設(shè)置字體和行數(shù)并且排列他們。
然后按住command鍵選擇這兩個(gè)label筐付,點(diǎn)擊布局菜單下面的stackview小圖標(biāo)卵惦,他們就會(huì)被放置在一個(gè)stackView里,你可以設(shè)置這個(gè)stackview的布局和排列的方式(橫向或是縱向)以及間距瓦戚,然后添加兩個(gè)按鈕 分別為L(zhǎng)ike和Share沮尿,同樣的操作,把他們放置在stackView里進(jìn)行布局较解。最后你還可以把放置按鈕的stackview(按鈕組)放置到label的stackview里畜疾。和標(biāo)題的Label組成一個(gè)Stackview∮∠危總之非常靈活啡捶。


這樣Label和button就可以在stackview內(nèi)部自適應(yīng)排列了。

最后奸焙,我們?cè)俳o按鈕和label組成的這個(gè)stackview設(shè)置一下布局約束瞎暑。


要保證Label能夠永遠(yuǎn)自適應(yīng),最好修改Label的Line為0与帆,LineBreaks設(shè)置為Word Wrap了赌。到此為止,已經(jīng)完成了所有的UI設(shè)計(jì)工作±鹎牛現(xiàn)在運(yùn)行一下APP。

如果你在iphone上旋轉(zhuǎn)屏幕渠概,布局會(huì)變成這樣:

這本本身沒什么錯(cuò)茶凳,但是我們可以讓他更好嫂拴,比如這樣:

使用Size Class適配Stack Views

為了實(shí)現(xiàn)不同的布局,并讓stackview在不同的設(shè)備下自適應(yīng)贮喧,我們需要使用size class筒狠, 在IOS8文檔中詳細(xì)介紹了size class的概念,下面是IOS設(shè)備及size class對(duì)應(yīng)的大邢渎佟:

我們想讓viewstack(圖片組)的顯示可以根據(jù)屏幕的旋轉(zhuǎn)分別呈現(xiàn)為縱向和橫向辩恼,那么使用下面兩個(gè)sizeclass:

  • Compact width-Compact height
  • Regular width-Compact height

現(xiàn)在,選擇我們的stackview(圖片組)并且在屬性框添加屬性:

做完這些谓形,重新運(yùn)行app灶伊,我們就實(shí)現(xiàn)了上面的效果。

總結(jié)

在本教程中寒跳,我們演示了如何使用StackView來(lái)布局用戶界面聘萨,它簡(jiǎn)化了許多工作,僅僅需要做少量的約束便可實(shí)現(xiàn)自適應(yīng)布局童太。你可能有一個(gè)問題米辐,你是否應(yīng)該使用StackView?那么书释,Apple官方建議開發(fā)人員應(yīng)優(yōu)先采用StackView來(lái)設(shè)計(jì)用戶界面翘贮,然后再根據(jù)實(shí)際需求來(lái)添加約束,因此爆惧,開始使用StackView來(lái)設(shè)計(jì)你的用戶界面吧狸页,我想你會(huì)喜歡上它。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末检激,一起剝皮案震驚了整個(gè)濱河市肴捉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叔收,老刑警劉巖齿穗,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異饺律,居然都是意外死亡窃页,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門复濒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脖卖,“玉大人,你說(shuō)我怎么就攤上這事巧颈∑枘荆” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵砸泛,是天一觀的道長(zhǎng)十籍。 經(jīng)常有香客問我蛆封,道長(zhǎng),這世上最難降的妖魔是什么勾栗? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任惨篱,我火速辦了婚禮茬贵,結(jié)果婚禮上缓溅,老公的妹妹穿的比我還像新娘。我一直安慰自己诵叁,他們只是感情好界牡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布簿寂。 她就那樣靜靜地躺著,像睡著了一般欢揖。 火紅的嫁衣襯著肌膚如雪陶耍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天她混,我揣著相機(jī)與錄音烈钞,去河邊找鬼。 笑死坤按,一個(gè)胖子當(dāng)著我的面吹牛毯欣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臭脓,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼酗钞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了来累?” 一聲冷哼從身側(cè)響起砚作,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘹锁,沒想到半個(gè)月后葫录,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡领猾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年米同,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摔竿。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡面粮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出继低,到底是詐尸還是另有隱情熬苍,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布袁翁,位于F島的核電站柴底,受9級(jí)特大地震影響钱磅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜似枕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望年柠。 院中可真熱鬧凿歼,春花似錦、人聲如沸冗恨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掀抹。三九已至虐拓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間傲武,已是汗流浹背蓉驹。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揪利,地道東北人态兴。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疟位,于是被迫代替她去往敵國(guó)和親瞻润。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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

  • 翻譯自“Auto Layout Guide”甜刻。 1 入門 1.1 理解自動(dòng)布局 自動(dòng)布局根據(jù)視圖層級(jí)結(jié)構(gòu)中視圖上的...
    lakerszhy閱讀 3,566評(píng)論 3 26
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,732評(píng)論 25 707
  • 這是一篇挺老的文章绍撞,主要就是介紹在iOS9時(shí)推出的控件UIStackView。我發(fā)現(xiàn)網(wǎng)上的資料并不算多得院,而AppC...
    Liberalism閱讀 11,077評(píng)論 2 26
  • 碧海藍(lán)天暖陽(yáng)照 綠水青山腳下踩 抓起背包拿相機(jī) 記錄美景與佳期
    蓬蒿居士李閱讀 279評(píng)論 1 12
  • 來(lái)源_難得書院 對(duì)于一個(gè)家庭來(lái)講尿招,你是樹根矾柜,孩子是花朵。 如果花朵有問題就谜,多半是樹根也有問題怪蔑。家長(zhǎng)們常常“看到”的...
    萬(wàn)事從容閱讀 321評(píng)論 0 0