天天看點

一天一點xib:7再聊SB

引言

我們再來聊聊SB

添加tableHeaderView和tableFooterVie

是的,沒有聽錯,不用代碼,“拖”出header于footer,其實很簡單,選中tablView,在控件中找到View拖到tableView上,往最上方拖動,知道看到左右有兩個圈的時候松手,這個View就是tableHeaderView了,同理,往最下方拖,就是tableFooterView。

一天一點xib:7再聊SB

LaunchScreen.storyboard

從iOS8開始iPhone多了4.7"和5.5"的兩種裝置,這使得适配更加複雜,特别是設定啟動圖,如果考慮到橫豎屏的話,要做好多張圖,最重要的是,啟動圖是最占體積的東西,為了更好、更方面的配置啟動圖,LaunchScreen.storyboard出現了,簡單來說,啟動的時候會加載這個SB檔案,我們可以同過它更友善的設定啟動圖,可以用auto layout減少啟動圖數量的使用,但此功能隻支援iOS8及其以上的系統。

那麼問題來了,我要想适配更低的系統怎麼辦?答:不用。

如何禁止該功能?

一天一點xib:7再聊SB

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功能後,選中控件的屬性标簽會發現,有些屬性前有“+”的标志,點選這個标志就可以給這個控件的這個屬性添加不同類型的描述了。

一天一點xib:7再聊SB

Storyboard Entry Point

如果我們用xcode6或者更高版本的xcode建立工程的話,你會發現自動就有了一個Main.storyboard

application:didFinishLaunchingWithOptions:中沒有一行代碼運作就沒有問題,并不像之前那樣,要建立window,指定rootViewController,這些是如何實作的?

一天一點xib:7再聊SB

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?很簡單

一天一點xib:7再聊SB

勾選就是設定了Storyboard Entry Point,設定了Storyboard Entry Point的VC會有一個向右的箭頭指向它,注意你在Main Interface裡選的SB檔案中一定要有VC勾選了這個,不然xcode是不知道如何設定rootViewController的,你不用擔心多選的問題,你如果選擇一個新的VC,舊的那個VC就自然沒有了Storyboard Entry Point,但是如果你又取消了勾選那麼舊的VC并不會自動又添加Storyboard Entry Point的,要小心。

總結

xib與SB其實還有很多功能等着我們去學習、實踐呢,之前介紹的這些都是大家在工作中最長使用的,下次講講一些高冷用法。

繼續閱讀