作者:Natasha浮梢,原文鏈接,原文日期:2016/03/27
譯者:saitjr彤路;校對:小鍋秕硝;定稿:千葉知風
@helenvholmes 在 @tryswiftconf 中談到了一個我很感興趣的話題(其實每個話題我都很感興趣)—— 設計師怎樣入門開發(fā)。當然從 Storyboard 入手是顯而易見的洲尊。但這一見解卻在開發(fā)者之間引起了很大的爭議远豺。
事實上坞嘀,我并沒有參與整個爭論的過程。Interface Builder 存在一些弊端嗎继准?當然,但是以我的經(jīng)驗來看避凝,利還是遠大于弊的撑螺。而且這并不止關系到設計師怎樣入門含潘,而是所有人應該怎么入門。Interface Builder 可以使我們整個項目代碼更易懂泪姨。
在開發(fā)者拿到別人的項目時袋坑,從 Storyboard 開始梳理每個 ViewController 的關系是相當清晰的婆誓。
從這種角度上來說,Storyboard 是工具。和所有工具一樣权旷,如果你錯誤的使用它,那么它會毫無用處鄙麦,甚至有反作用。所以我總結(jié)了幾個如何高效使用 Interface Builder 的方式:
多個 Storyboard
使用 Storyboard 過程中,最大的問題就是:開發(fā)者從 Main.Storyboard 開始寫侣签,隨之將所有的內(nèi)容都加到了這個 Storyboard 中僚碎!很快,Storyboard 變得很重懒闷,界面關系錯綜復雜。如果項目中加入了其他開發(fā)者默刚,那他們什么都不能做,因為任何操作都會在 merge 時,引起沖突赂蕴。
我認為 Storyboard 就像是代碼,所以盡量保持 Storyboard 的整潔。我傾向于程序的每個獨立的模塊都有對應的 Storyboard。就好比登錄注冊模塊,或者設置模塊,這完全可以和程序的其他邏輯獨立開,那么就可以單獨一個 Storyboard柿冲。如果 app 有 TabBar宿饱,那么每個 tab 對應的模塊都可以創(chuàng)建單獨的 Storyboard由桌。
有時候炕檩,我的 Storyboard 中可能只有兩個界面妇押,但這沒關系色冀。因為隨著項目的迭代,我可以很容易地往里面添加更多的界面。
通過這樣整理 Storyboard敞斋,我完全不用擔心 merge 時的沖突蚓峦。在我開發(fā)設置模塊的時候干茉,其他開發(fā)者也可以同時的開發(fā)注冊模塊戳鹅,因為 Storyboard 是獨立的腾它,所以不會有沖突。如果我們需要修改相同的模塊(相同的 Storyboard)旁瘫,那么我們會進行溝通協(xié)作,防止沖突。
隨著 Storyboard References 的引入阻逮,使用多個 Storyboard 就更加簡單了降盹。
Nibs
我很喜歡用 Storyboard 來進行模塊的開發(fā),它能很好的表達出每個界面之間的關系,并且界面相關的配置也一目了然。它擁有很強的可讀性夜郁,而這點純代碼是很難做到的。這便是 Storyboard 最大的優(yōu)勢?,它主要作用并不是管理每個視圖或設計圖。
在項目中贵扰,有很多需要復用的 view 和 Table View Cell拔鹰。如果你發(fā)現(xiàn)自己在一個或多個 Storyboard 中使用到了相同的 view瓷马,那就將這個 view 封裝為 Nib欧聘。再次強調(diào)蒋伦,應該保證你的 Storyboard 或者 Nib “代碼”保持相對獨立并可以被復用研叫。
由于我喜歡盡可能的對 view 進行復用迈窟,所以我的 Storyboard 一般是這樣的:
即使保留著大量的使用 Nib (或者是純代碼)構(gòu)造的 view 都是 ok 的窄坦。這樣看起來很空曠的 Storyboard,對我來說也相當有用凳寺,它依然清晰的描述了界面的結(jié)構(gòu)鸭津,我也能方便的查看 ViewController 內(nèi)部細節(jié)。
IBInspectable / IBDesignable
在使用 Storyboard 或 Nib 時肠缨,遇到的另一個問題就是我可能需要對 view 進行一些改動逆趋,而且這些改動不能再 Storyboard 中進行,這就意味著晒奕,程序運行出來的效果闻书,和我在 Storyboard 中看到的效果不同。
不過現(xiàn)在有了 IBInspectables / IBDesignables脑慧,我們就可以在 Storyboard 中來進行改動魄眉,并且在當前畫布的右邊欄能看到改動的屬性列表。
Autolayout / Stack Views
在使用自動布局的時候漾橙,沒有可視化界面簡直寸步難行杆融。我很喜歡 Storyboard 或 Nib 在我缺少約束的時候給出警告,然后我再逐個去解決霜运。Stack View 也是這樣的,可以看到 view 的即時反饋蒋腮,并進行調(diào)整也是極好的淘捡。
最后
作為一名 iOS 開發(fā)者,我真的很喜歡 Interface Builder池摧,真是不理解為什么有些開發(fā)者這么反感它焦除。當然,如果你沒有正確的使用它作彤,那我無話可說膘魄。只要你模塊化的管理 IB 文件,并保持簡潔竭讳,那么無論誰在中途參與到項目中來创葡,程序的可讀性都沒有問題。
本文由 SwiftGG 翻譯組翻譯绢慢,已經(jīng)獲得作者翻譯授權(quán)灿渴,最新文章請訪問 http://swift.gg。