代碼手寫ui,xib 和 storyboard間的博弈
Size Class 和Auto Layout
1、各種布局的簡介。
2、各種布局的利弊。
3、如何取舍各種布局。
4、Size Class 和Auto Layout 的使用。
5、各種布局適配iOS橫豎屏旋轉。
一、各種布局的簡介。
隨著iOS發展到今天,UI上的布局逐漸形成了三大主流派:
第一種:使用純代碼寫UI及其布局。比如我們的CMSMoblie項目。就是典型的例子。
第二種:使用單個xib文件組織viewController和view。比如我們的運維寶項目。
第三種:使用storyBoard來通過單個或很少的幾個文件來構建全部UI。比如我們的CeiBar2項目。
其實這三種方式布局各有優劣。所以各有適合的應用場景。
二 、各種布局的利弊
第一種:代碼手寫UI
優點:1、代碼可寫UI可從用性高。
2、適合大型項目多人開發。
缺點:1、寫代碼速度慢。
2、不好適配橫豎屏旋轉。
第二種:xibs
優點:1、可以少寫大量代碼,從而提高開發速度。
2、xib的設計更加完美的體現了MVC的設計模式。
缺點:1、xib文件內容過于復雜,可讀性很差。
2、導致多人開發提交合并代碼的痛苦。
3、xib沒有邏輯判斷,也很難在運行是進行配置,不像使用代碼那樣無所不能。
第三種:storyBoard
優點:1、在StoryBoard中不僅可以看到每個ViewController的布局樣式,也可以明確地知道各個ViewController之間的轉換關系。
2、相對于單個的xib,其代碼需求更少,也由于集合了各個xib,使得對于界面的理解和修改的速度也得到了更大提升。
缺點:1、StoryBoard面臨的最大問題就是多人協作。
2、StoryBoard的另外的挑戰來源于ViewController的重用和自定義的view的處理。
3、因為相對于單個xib來說,StoryBoard文件往往更大,加載速度也相應變慢。
三、如何取舍各種布局。
大型項目、自定義控件多、多人開發、需要多個項目重用的、建議用純代碼編寫UI界面。
小項目、追求開發速度的項目、需要支持橫豎屏旋轉的項目。可以用xib和StoryBoard。
四、Size Class 和Auto Layout 的使用。
1、Size Class簡介
Size Classes。在 iOS8 中,我們不用再像以前那樣,一個頁面新建多個 xib 文件來適配不同類型的屏幕,現在我們可以把各種尺寸屏幕的適配工作放在一個文件中完成,然后可以通過不同類別的 Size 來定制各種尺寸的界面。換句話說,你眼前的 Storyboard 不是一個普通的 Storyboard ,而是一個九合一的 Storyboard ,可以管理九種類型的屏幕。
對于寬度和高度而言,都有三種情況:緊湊 (Compact) 、任意 (Any) 、正常 (Regular) ,所以一共有9個類別,在設置 Size Class 的時候頁面會有提示。比如寬為 Compact 高為 Any 的情況,提示為 3.5-inch、4-inch、4.7-inch的橫豎狀態下的屏幕:
2、AutoLayout和Autoresizing Mask的區別
描述:每個view的size inspector中都有一個紅色線條的Autoresizing的指示器和相應的動畫縮放的示意圖,這就是Autoresizing Mask。在iOS6之前,關于屏幕旋轉的適配和iphone,iPad屏幕的自動適配,基本都是由Autoresizing Mask來完成的。但是隨著大家對iOS app的要求越來越高,以及已經以及今后可能出現的多種屏幕和分辨率的設備來說,Autoresizing Mask顯得有些落伍和遲鈍了
第一點:AutoLayout可以指定任意兩個view的相對位置,而不需要像Autoresizing Mask那樣需要兩個view在直系的view hierarchy中。
第二點:AutoLayout不必須指定相等關系的約束,它可以指定非相等約束(大于或者小于等);而Autoresizing Mask所能做的布局只能是相等條件的。
第三點:AutoLayout可以指定約束的優先級,計算frame時將優先按照滿足優先級高的條件進行計算。
3、Auto Layout 的使用。
簡介:Auto Layout是在WWDC2012上被引入到iOS中的,從iOS6.0以后就開始支持,但是大多數的開發者還是習慣使用傳統的UI布局方式,雖然有一大部分開發者早已使用了Auto Layout,這其中大多數的開發者是在拖拽IB文件或者是使用StoryBoard時才會選擇用Auto Layout的布局方式。
Auto Layout是一種基于約束的、描述性的布局系統。也就是使用約束條件來描述布局,View的Frame會根據這些描述來進行計算。
在iOS6.0以后加入了一個新類:NSLayoutConstraint。我們可以使用可視化格式化語言Visual Format Languag的方式創建約束。
五、各種布局適配iOS橫豎屏旋轉。
1、結合我們的實際項目來講解。
本文參考文檔:
http://www.itjhwd.com/adaptive-layout-for-iphone6-1/
http://www.cocoachina.com/swift/20141013/9893.html
http://www.2cto.com/kf/201409/334180.html
http://blog.csdn.net/dongbaojun_ios/article/details/12566529
新聞熱點
疑難解答