刷微博看到nixzhu的AutoLayout Tips庸推,Tip 1
是基于純代碼實現(xiàn)常侦,由于本人比較懶,使用AutoLayout
除非萬不得已予弧,否則是不會動代碼刮吧,這里使用可視化的方式來演示,只是覺得可能更便于理解掖蛤!
那么開始杀捻,新建工程就不用多說了,或者懶癌患者下載原作者工程
(還是都下載吧蚓庭,方便看效果)致讥。
打開工程跑一盤,看下效果:
接下來我們開始純可視化操作(PS:這里先不解釋器赞,直接跟著操作即可):
首先打開原作者工程
里的Main.storyboard
垢袱,拖一個UIView
到ViewController
里,這里為了方便觀察理解港柜,我把圖片背景色改了下请契。
接著拖一個UIImageView
和UILabel
到灰色的UIView
里。
我們看到此時并無任何約束的警告夏醉,那好爽锥,現(xiàn)在開始添加約束。
這里先給UIImageView
添加上下左右的約束畔柔,constant
值隨意氯夷。
添加完成之后開始報警告,先忽略靶擦,繼續(xù)拉約束腮考。
因為已經(jīng)給UIImageView
和UILabel
添加了間隙約束雇毫,所以只用繼續(xù)給UILabel
添加上
,右
踩蔚,左
的約束即可棚放。
其實這里給UILabel
添加約束還有一種做法就是添加右
邊約束和Y
軸上的約束即可。
這里我選擇第二種寂纪,同樣的效果席吴,約束能少則少,或者按照實際需求來就好捞蛋。
約束已經(jīng)添加完整孝冒,SDK
還是在報警告。
這里SDK
提示我們view
上需要X
和Y
軸上需要約束來確定控件位置拟杉。這里也是兩個不等寬的 View庄涡,彼此相鄰,并“共同”居中于 Superview
最后的步驟搬设。我們把view
居中穴店,然后在給一個X
軸上的約束即可,所以隨便搞一下拿穴,添加一個豎向居中(也就是Y軸居中)
即可泣洞。到此我們?nèi)考s束添加完畢。
PS:這里為了更好區(qū)分默色,我給容器視圖整了個備注叫Container View
球凰。
即便是添加完了約束,SDK
還是提示不能確認位置腿宰。
大家不要慌呕诉,這里其實Container View
不能確定位置原因在于UIImageView
大小沒確定,我們只需要把UIImageView
設置一個占位
或者給個圖片
即可吃度。
或者
這里以添加圖片為準甩挫,就此所有約束錯誤都以解決,只剩下frame
的Waring
椿每。自行修復一下即可(All Views Update Frames
)伊者。
最后我們來看看完成的效果。
總體效果出來了间护,間距自行調(diào)整删壮。手把手教程到此結(jié)束。
好了兑牡,po了一堆圖之后我們再來簡單說說核心思想:其實就是利用Storyboard里控件的Intrinsic Size
特性,利用其手動占位
或者系統(tǒng)自動
幫忙占位的原理就可確認其width
和height
税灌,然后在讓其四邊頂住Container View
四邊均函,Container View
的width
和height
也就確認了亿虽,剩下的就是確認Container View
的X
軸和Y
軸上的位置,三個控件的約束確定完成苞也,Frame
也就確認好了洛勉,也就達到了兩個不等寬的 View,彼此相鄰如迟,并“共同”居中于 Superview
的目的收毫。
以此類推,利用兩個或者多個控件占位居中殷勘。
其實Tip 2 - 讓 AutoLayout 與 UIScrollView 合作無間
也是類似原理此再,?確認好UIScrollView
的ContentSize
即可,其實還有更多的玩法玲销,如需要手把手教程输拇,留言呼喚。
最后再給懶癌患者配張動態(tài)圖:
我的界面開發(fā)原則贤斜,能不寫代碼就不寫代碼策吠,讓我們的ViewController
更瘦,邏輯更清晰更簡潔瘩绒。
歡迎吐槽和共同探討無代碼界面開發(fā)猴抹。