引言
我們再來聊聊SB
添加tableHeaderView和tableFooterVie
是的,沒有聽錯,不用代碼,“拖”出header于footer,其實很簡單,選中tablView,在控件中找到View拖到tableView上,往最上方拖動,知道看到左右有兩個圈的時候松手,這個View就是tableHeaderView了,同理,往最下方拖,就是tableFooterView。
LaunchScreen.storyboard
從iOS8開始iPhone多了4.7"和5.5"的兩種設備,這使得適配更加復雜,特別是設置啟動圖,如果考慮到橫豎屏的話,要做好多張圖,最重要的是,啟動圖是最占體積的東西,為了更好、更方面的配置啟動圖,LaunchScreen.storyboard出現了,簡單來說,啟動的時候會加載這個SB文件,我們可以同過它更方便的設置啟動圖,可以用auto layout減少啟動圖數量的使用,但此功能只支持iOS8及其以上的系統。
那么問題來了,我要想適配更低的系統怎么辦?答:不用。
如何禁止該功能?
size classes
size classes也是iOS8的新功能,.xib文件也是可以使用的,但大部分情況還是基于SB來使用,從xcode6開始我們新建的xib或SB文件中對應的View變成了正方形,而且下方顯示"wAny hAny",點擊后發現是可以選擇的,選擇不同的情況,View又變成了不同的形狀,這就是size classes。簡單的理解:size classes就是對設備的屏幕尺寸進行了抽象,寬高都分別用Regular、Compact來表示,我們其實不用太在意名稱,只知道,以后不同的設備或者不同的狀態(橫豎屏)可以由這種描述來表示即可,具體的表示如下:
iPhone4S,iPhone5/5s,iPhone6,iPhone6s
豎屏:(w:Compact h:Regular)
橫屏:(w:Compact h:Compact)
iPhone6P、iPhone6sP
豎屏:(w:Compact h:Regular)
橫屏:(w:Regular h:Compact)
iPad
豎屏:(w:Regular h:Regular)
橫屏:(w:Regular h:Regular)
由此我們可以看出,雖然把屏幕抽象了,但是用Regular、Compact并不能標識出各種不同的設備,豎屏情況下,所有iPhone用這種抽象表示是一樣的(w:Compact h:Regular) ,所以:如果我們不適配橫屏,或者iPad,只做豎屏iPhone顯示的話,size classes并沒有什么用,我個人認為目前的size classes應用面還是很窄的。
如果我們適配橫屏,或iPad應該怎么做?
因為橫屏后或者設備是iPad,那么size classes這種描述就會發生改變,而一旦描述發生改變,我們就能根據不同描述,做不同的布局,例如:我們在w:Compact h:Regular的情況下向View里拖了一個label,此時我們改變size classes為w:Regular h:Regular,你會發現該label不顯示了,也就是說你在w:Compact h:Regular的情況下顯示的label只在該情況下顯示,這樣就可以針對不同類型的描述,設置不同的UI布局了,除此之外,還可以給控件添加適配不同類型的描述。開啟size classes功能后,選中控件的屬性標簽會發現,有些屬性前有“+”的標志,點擊這個標志就可以給這個控件的這個屬性添加不同類型的描述了。
Storyboard Entry Point
如果我們用xcode6或者更高版本的xcode創建工程的話,你會發現自動就有了一個Main.storyboard
application:didFinishLaunchingWithOptions:中沒有一行代碼運行就沒有問題,并不像之前那樣,要創建window,指定rootViewController,這些是如何實現的?
xcode自動配置了一個SB文件,而以上的這一切都有xcode自動幫我們完成了。
那么問題來了:一個SB是可以對應多個VC的,他選哪個VC作為window的rootViewController?答案是Storyboard Entry Point,這個東西就是用來指定那個作為rootViewController的,也就是說,xcode會找到表示為Storyboard Entry Point的那個VC加載它成為rootViewController,而以后的跳轉就由我們之前介紹的方式:
SecVC *secVC = [[UIStoryboard storyboardWithName:@"Demo" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"SecVC"];
[self.navigationController pushViewController:SecVC animated:YES];
或者之前說過的segue的方式進行了。
那么如何來指定Storyboard Entry Point?很簡單
勾選就是設置了Storyboard Entry Point,設置了Storyboard Entry Point的VC會有一個向右的箭頭指向它,注意你在Main Interface里選的SB文件中一定要有VC勾選了這個,不然xcode是不知道如何設置rootViewController的,你不用擔心多選的問題,你如果選擇一個新的VC,舊的那個VC就自然沒有了Storyboard Entry Point,但是如果你又取消了勾選那么舊的VC并不會自動又添加Storyboard Entry Point的,要小心。
總結
xib與SB其實還有很多功能等著我們去學習、實踐呢,之前介紹的這些都是大家在工作中最長使用的,下次講講一些高冷用法。
歡迎大家和我交流溝通,若文章中有錯誤和紕漏,懇請指正,謝謝。