UI布局分為如下幾種
1.frame
- Autolayout VFL(Visual Format Language)
3.SB
4.Masonry/Snapkit 鏈?zhǔn)秸Z(yǔ)法
5.Yoga - SizeClass
Autolayout里有兩個(gè)詞炭菌,約束罪佳,參照
要想顯示一個(gè)控件,需要兩個(gè)東西黑低,位置赘艳,尺寸
添加約束不宜過多,當(dāng)添加的約束足以表達(dá)該控件的位置與尺寸投储,就足夠了
約束就是對(duì)控件的大小或者位置進(jìn)行約束第练,參照就是以某個(gè)控件的位置進(jìn)行約束阔馋,其實(shí)這兩者沒有明確的分別玛荞,它們都可以對(duì)控件的位置與尺寸起到作用。
所有控件呕寝,都逃不開位置勋眯,尺寸,Autolayout就是拿來干這個(gè)用的,所以我后面的例子都以UIView為例
Masonry必須要把控價(jià)添加到父視圖以后才可以進(jìn)行布局客蹋,不然會(huì)crash
內(nèi)存管理,約束的block里面有時(shí)候會(huì)引起隱式內(nèi)存泄露
偶爾會(huì)遇見重復(fù)約束的問題塞蹭,查看控制臺(tái)log,進(jìn)行調(diào)整修改
重點(diǎn)在于,給出的約束一定要能計(jì)算出控件的位置和大小讶坯,缺一不可
有時(shí)候給出的約束可能沒有明確指出某個(gè)約束的值,但是可以通過給定條件計(jì)算出來,也是可以的,比如下面這個(gè)例子,做一個(gè)水平三等分
記住一個(gè)快捷鍵command + option + ‘=‘(update constraint constant)
SB/xib多人開發(fā)的問題
SafeArea
在Xcode 7之前,storyboard在團(tuán)隊(duì)開發(fā)的時(shí)候非常不友好,因?yàn)橐粋€(gè)storyboard文件有很多個(gè)界面,多人開發(fā)的話,就需要多個(gè)人都打開這個(gè)storyboard文件,而在Xcode 7之前你只要點(diǎn)開storyboard文件,雖然你啥都沒有做,但是storyboard文件里面出現(xiàn)一個(gè)Modify標(biāo)記,然后你提交代碼的時(shí)候會(huì)conflict,很多團(tuán)隊(duì)因?yàn)檫@個(gè)問題放棄storyboard,轉(zhuǎn)而使用xib,甚至連xib都不用了,直接手?jǐn)].
只從Xcode 7以后,蘋果針對(duì)這個(gè)問題推出了storyboard reference來解決storyboard的多人開發(fā)問題
storyboard reference的功能就是拆分storyboard,把storyboard拆分成一個(gè)個(gè)小模塊,這樣每個(gè)開發(fā)人員對(duì)應(yīng)一個(gè)模塊,各自分離,互不相干
代碼加載SB番电,需要再SB中設(shè)置identity usestoryboard id
有很多人說在維護(hù)xib/storyboard開發(fā)的項(xiàng)目的時(shí)候有些困難,找不到view關(guān)系,看不到代碼等,其實(shí)我想說,那是因?yàn)槟阏娴臎]有用心的去學(xué)習(xí)xib/storyboard,如果作為維護(hù)者的你也對(duì)xib/storyboard非常熟悉,你會(huì)發(fā)現(xiàn)維護(hù)xib/storyboard開發(fā)的項(xiàng)目會(huì)比純代碼的相對(duì)輕松的,至少你不需要在1000+的代碼中去找某個(gè)button添加的action;