自適應布局(Adaptive Layout)

參考資料:

Adaptive Layout Tutorial in iOS 9: Getting Started

iOS8 Size Classes初探 · sunnyxx的技術博客

Auto Layout 和 Constraints - iOS · 碎碎念 - SegmentFault

通過一個關于天氣的項目,你將學到通用故事板(Universal Storyboards),尺寸類別(Size Classes)泉手,自定義布局和字體运沦,預覽助手編輯器(Preview Assistant Editor)相關的知識。

項目效果圖:

iPhone豎向
iPhone橫向


01 通用故事板(Universal Storyboards)

1.什么是通用故事板?簡言之爽室,能為ipad和iPhone所用的故事板当娱。

2.為什么Main.Storyboard里的視圖控制器是正方形的?

將屏幕尺寸進行抽象化斧蜕,以適應不同屏幕尺寸的設備。

02 自定義布局

1.在Storyboard里砚偶,分別拖一個Image View和一個View出來批销,并在View的Identity Inspector里將”TextContainer“填入Label位置。

--進行Size設置染坯。

Image View的Size Inspector
Text Container的Size Inspector

--進行Color設置均芽。

View的背景顏色設置
TextContainer背景顏色設置

2.布局約束設置。

在storyboard中有三種方式設置約束

--ctrl+drag(可以從一個控件拖動到另一個控件单鹿,設置它們之間的關系掀宋。也可以拖動到控件自身,設置寬度和高度)(我個人偏好使用這種方式)

--使用Stack仲锄,Pin劲妙,Align,Resolve工具

好處一:使得精確控制約束的constant或一次性添加多個約束更方便儒喊;

好處二:不需設置好view的位置镣奋,而只需要定好相對位置,添加約束怀愧,然后update frames侨颈,Auto Layout會自動計算出正確的位置

--讓Interface Builder自動添加約束

前提是確定view的位置不再更改。

回到項目中:

(1)給image view加三個約束芯义。

--運用Align Tool肛搬,快速對齊控件。

Align Tool

--運用Pin Tool毕贼,給View定位温赔。快速設置一個View相對于周邊View的位置或者它的寬高鬼癣。


Pin Tool

--Ctrl+drag設置image view和TextContainer之間的垂直間隔陶贼。

最后,三個constraints的添加完成待秃。

image view的constraints

(2)給TextContainer加約束拜秧。

--使用Pin Tool。這里不需要勾選constrain to margins章郁。如果選中枉氮,會將父視圖的外邊距作為邊距的值來考慮志衍。margin的默認值是8,也就是說如果勾選聊替,三個框里應該填的是8.

Pin Tool

(3)圖片填充image view:

cloud_images.zip

(4)使用Resolve工具楼肪。

Resolve Auto Layout Issues

03 預覽助手編輯器

預覽助手編輯器能讓你更方便地查看view在不同尺寸設備,不同方向上的呈現(xiàn)情況惹悄。

1.選擇View-Assistant Editor-Show Assistant Editor-Automatic-Preview-Main.storyboard(Preview)

在左下角春叫,選擇+按鈕,在彈出的窗口中選擇iPhone 5.5inch和iPad泣港。

Preview Assistant Editor

但是橫向時暂殖,cloud image顯得太大。

2.調整cloud image的大小当纱。選中image view呛每,ctrl+drag到view上,選擇Equal Heights坡氯。

解決這里constraints的沖突:選中新添加的constraint進行修改莉给,使得image view的高度等于view的高度或者小于等于view高度的40%

修改Constraint

04?尺寸類別(Size Classes)

Size Classes簡介

1.Size Classes是什么?可以用來干什么?

它是對老式UI思路的全新抽象:把各個設備屏幕廉沮,以及它們屏幕旋轉的狀態(tài)都抽象成屏幕Size的變化,將這些Size歸納成幾個類別(Class)。

Size Class配合Auto Layout可以解決所有iOS設備屏幕尺寸及屏幕旋轉時候的UI適配問題 徐矩。

2.有幾種Size Classes滞时?有幾種Size Classes組合?

共有兩種Size Classes:Regular和Compact滤灯。下表顯示的是Size Class在不同裝置的不同方向上的運用情況:

Size Class在不同裝置的不同方向上的運用情況

有9種Size Classes組合坪稽。寬(Regular,Compact,Any),高(Regular,Compact,Any), 3 x 3,共9種組合。默認是在寬任意鳞骤,高任意模式下設置,且其他8種布局繼承它窒百。

3.Size Classes怎么用?

首先豫尽,搭建基本布局篙梢。接下來,再根據(jù)不同Size Class的具體需求進行自定義美旧。

IB中某個View的出現(xiàn)與否渤滞,約束的出現(xiàn)與否,約束的值都是可以根據(jù)Size Classes單獨設置的榴嗅。

比如妄呕,一個Image View,我只需要它出現(xiàn)在寬高緊縮(compact)的屏幕上(如Apple Watch)嗽测。Installed绪励,表示“出現(xiàn)在屏幕上”。

項目練習

1.往TextContainer里添加內容

--拖兩個Label出來,進行字體疏魏,顏色停做,約束的設置。

對于城市這個label蠢护,字體設置為System-Thin-150雅宾,顏色為白色。對于溫度這個Label葵硕,字體設置為System-Thin-250眉抬,顏色為白色。

城市Label的約束
溫度Label的約束

但是懈凹,此時的字體顯然太大了蜀变。

Preview Assistant Editor

2.切換Size Class為Any Width|Compact Height模式

Any Width|Compact Height

3.更改image view的約束

(1)刪除image view默認類型的約束

--打開image view的Size Inspector,把Align Center X to:SuperView這個約束刪除介评。

刪除約束

雙擊這個約束進去库北。如圖,這表示對于基本布局们陆,約束是存在的寒瓦,但是對于Any Width|Compact Height模式的布局,約束是不存在的坪仇。對剩下三個約束做同樣的刪除操作杂腰。

約束查看

(2)為Any Width|Compact Height模式的image view添加約束

添加約束

然后,ctrl drag image view到View 上椅文,選擇Equal Widths喂很,Multiplier為0.45

接下來,需要把label移到右邊皆刺。

4.更改TextContainer的約束少辣。

(1)刪除默認模式下的約束。Cmd +delete TextContainer.leader = leading

(2)添加約束羡蛾。crtl drag TextContainer到View上漓帅。選擇Vertical Spacing to Top Layout Guide和Equal Widths(Multiplier設為0.5)

添加約束

最后,update frames

Interface Builder

05適配字體

注意:與overrride布局不同痴怨,override字體會影響到基本布局煎殷。

1.切換Size Class為Any Width|Any Height模式

2.打開城市l(wèi)abel的attributes inspector,點擊+號后腿箩,選擇Compact Width>Any Height豪直。并修改字體。

點擊+號
修改字體

溫度label同樣做法珠移,只是Compact Width|Any Height的字體設置為150.

3.對兩個label的寬度加以限制弓乙。分別ctrl+drag label到TextContainer上末融,選擇Equal Widths。

4.對兩個label的Alignment和Autoshrink進行修改暇韧。

對兩個label的Alignment和Autoshrink進行修改

最后項目完成9聪啊!懈玻!

Github項目地址:

GitHub - Paganarchitect/iOS_tutorial_exercises_RayWenderlich: iOS exercises based on Ray Wenderlich tutorial

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末巧婶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涂乌,更是在濱河造成了極大的恐慌艺栈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湾盒,死亡現(xiàn)場離奇詭異湿右,居然都是意外死亡,警方通過查閱死者的電腦和手機罚勾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門毅人,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尖殃,你說我怎么就攤上這事丈莺。” “怎么了送丰?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵缔俄,是天一觀的道長。 經常有香客問我蚪战,道長,這世上最難降的妖魔是什么铐懊? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任邀桑,我火速辦了婚禮,結果婚禮上科乎,老公的妹妹穿的比我還像新娘壁畸。我一直安慰自己,他們只是感情好茅茂,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布捏萍。 她就那樣靜靜地躺著,像睡著了一般空闲。 火紅的嫁衣襯著肌膚如雪令杈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天碴倾,我揣著相機與錄音逗噩,去河邊找鬼掉丽。 笑死,一個胖子當著我的面吹牛异雁,可吹牛的內容都是我干的捶障。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼纲刀,長吁一口氣:“原來是場噩夢啊……” “哼项炼!你這毒婦竟也來了?” 一聲冷哼從身側響起示绊,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤锭部,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耻台,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體空免,經...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年盆耽,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹋砚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡摄杂,死狀恐怖坝咐,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情析恢,我是刑警寧澤墨坚,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站映挂,受9級特大地震影響泽篮,放射性物質發(fā)生泄漏。R本人自食惡果不足惜柑船,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一帽撑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鞍时,春花似錦亏拉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锐极,卻和暖如春笙僚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灵再。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工味咳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庇勃,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓槽驶,卻偏偏與公主長得像责嚷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掂铐,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內容