WWDC之Mysteries of Auto Layout Part 1

前言

本文為WWDC2015的Session 218 "Mysteries of Auto Layout Part 1"視頻筆記,視頻主要內(nèi)容為UIStackViewAutolayout組件兩大部分.在看這個Session的過程中,發(fā)現(xiàn)有些不少值得關(guān)注的地方,因此記錄下來,等內(nèi)容進(jìn)一步的完善.

內(nèi)容

Mystery#1 StackView

1.基于Autolayout的最高一層封裝,
2.支持iOS和OSX平臺(主要還是關(guān)注下iOS)
3.它能幫你管理子視圖的約束.
4.重要屬性

  • axis 決定子視圖的排布方式:水平還是垂直
  • horizontal
  • vertical
  • alignment 設(shè)置子視圖在StackView的對齊方式

  • top

  • center

  • bottom

  • baseline

  • firstBaseline

  • lastBaseline

  • fill

  • Leading

  • Trailing

  • distrubute 允許設(shè)置靈活的分布

  • Fill

  • FillEqually : 等間距并且相同Size的填充

  • FillProportionally : 基于intrinsic content size的填充

  • EqualSpacing

  • EqualCentering

5.選擇UIStackView的快捷方式: Control+Shift+右擊 選擇UIStackView
6.快捷添加約束: 選擇視圖并Control-drag到指定視圖.
7.所有加入同一個StackView的視圖都默認(rèn)擁有相同的Priorites(content-hugging,compression-resistance),其子視圖出現(xiàn)拉升或收縮時需要自定義修改優(yōu)先級.
8.在設(shè)置StackView下的視圖的Hiden,只是界面上的隱藏,仍然為被StackView持有.
9.支持UIView動畫,由于基于Autolayout的封裝,其動畫屬性: hidden, space, axis, alignment, distrubute...
10.利用arrangedSubviews獲取StackView所有擁有的視圖子集,判斷指定視圖為否被裝入StackView.
11.StackView不需要后臺渲染,純粹的布局,輕量級.備注:內(nèi)部存在不渲染的特殊Transform 層.

Mystery#2 Constraints

  1. 改變視圖的約束使用 active/deactivate進(jìn)行約束改變,不再使用add/remove.類方法,不需要持有視圖而管理約束,約束自己找到所屬的視圖.
  2. 不能試圖將某一視圖的所有約束deactivate,極有可能內(nèi)部的約束與其他視圖存在聯(lián)系,進(jìn)而破壞約束平衡.
  3. 保持對于以后改變的指定約束或者約束集合的強(qiáng)引用,用來指定時機(jī)的active.

Mystery#3 Size

  1. 許多系統(tǒng)控件視圖存在intrinsic content size,比如UIButton,Label,imageView,UISlide... Autolayout引擎會自動對應(yīng)intrinsic content size創(chuàng)建內(nèi)部的約束.
  2. 想要自定義內(nèi)容尺寸重寫intrinsicContentSize方法, 針對以下兩種情況
  • 無法從約束獲取需要的尺寸信息
  • 繪制自定義視圖
  1. 重寫內(nèi)容尺寸后需要手動禁止影響內(nèi)部尺寸改變的因素.
  2. 利用size與其他視圖size建立關(guān)系,完善約束.

Mystery#4 Priority

  1. 系統(tǒng)有三個默認(rèn)值允許設(shè)置: 1000(require), 750(high), 250(low)
  2. 比較策略: 優(yōu)先級大的執(zhí)行其約束
  3. 系統(tǒng)視圖尺寸內(nèi)部也存在默認(rèn)的約束優(yōu)先級: iOS上50;OSX上490,500,510
  4. 注意自定義的約束優(yōu)先級與系統(tǒng)內(nèi)部的競爭
  5. 視圖間相同的優(yōu)先級會造成約束沖突;
  6. hug:防止拉伸超過自己的intrinsic content size; compression-resistance:防止壓縮小于自己的intrinsic content size.

Mystery5 Alignment

  1. 針對視圖間相關(guān)位置排列,水平/垂直居中.
  2. 針對文字內(nèi)容視圖,有baseline,firstBaselin,lastBaseline對齊方式,適用于文字動態(tài)高度變化時的視圖位置設(shè)定.
  3. leading/trailing 針對國際化語言的優(yōu)化,使用從左到右的語言會構(gòu)建從左到右的約束,反之相反.
  4. 如果使用了left/right 約束對齊,不能與 leading/trailing混淆使用,否則會有約束警告產(chǎn)生.
  5. alignment rects 通常(不絕對)為視圖的frame,可以針對主要內(nèi)容區(qū)域進(jìn)行對齊,剔除細(xì)微的邊界元素,不會改變視圖的transform.
  6. 想要改變alignment rects的指定區(qū)域需要重寫aligmentRectInsets方法,但意味著將自己處理對齊區(qū)域,系統(tǒng)不在計算.

結(jié)尾

通過這個session,看到了Stack View強(qiáng)大的布局能力,其簡單易用的API,讓內(nèi)容布局變得更加便捷和靈活也顯示著Autolayout技術(shù)的完善和進(jìn)步.后半部分對Autolayout引擎如何工作也說了全面的說明,使得對Autolayout技術(shù)的理解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末本缠,一起剝皮案震驚了整個濱河市含长,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌售葡,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丛晦,死亡現(xiàn)場離奇詭異洼怔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)又官,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門延刘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人六敬,你說我怎么就攤上這事碘赖。” “怎么了外构?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵普泡,是天一觀的道長。 經(jīng)常有香客問我审编,道長撼班,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任垒酬,我火速辦了婚禮砰嘁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伤溉。我一直安慰自己般码,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布乱顾。 她就那樣靜靜地躺著板祝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪走净。 梳的紋絲不亂的頭發(fā)上券时,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天孤里,我揣著相機(jī)與錄音,去河邊找鬼橘洞。 笑死捌袜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炸枣。 我是一名探鬼主播虏等,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼适肠!你這毒婦竟也來了霍衫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤侯养,失蹤者是張志新(化名)和其女友劉穎敦跌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逛揩,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡柠傍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辩稽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惧笛。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖搂誉,靈堂內(nèi)的尸體忽然破棺而出徐紧,到底是詐尸還是另有隱情,我是刑警寧澤炭懊,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布并级,位于F島的核電站,受9級特大地震影響侮腹,放射性物質(zhì)發(fā)生泄漏嘲碧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一父阻、第九天 我趴在偏房一處隱蔽的房頂上張望愈涩。 院中可真熱鬧,春花似錦加矛、人聲如沸履婉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毁腿。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間已烤,已是汗流浹背鸠窗。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留胯究,地道東北人稍计。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像裕循,于是被迫代替她去往敵國和親臣嚣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

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