Xcode6提供的Interface Builder,爲iOS界面建立提供了許多方便。可是,任何事物都存在兩面性,這裏對IB提出了幾點思考。
一個Storyboard只對應一個UIViewController
這樣的好處是顯而易見的,權責分明,Storyboard負責界面的繪製,而UIViewController負責邏輯的整理。然而,這也說明了一個Storyboard沒法對應多個UIViewController。這意味着若是兩個界面基本類似,若是仍是採用Storyboard的方式,則還得繪製兩套基本類似的界面,對應的控件若是有類似的邏輯則得所有從新操做一遍。
簡單的解決方法是把相同的部分以XIB文件的方式繪製爲UIView,再在UIViewController中將UIView手動添加進去。雖然這樣作仍是違背了Storyboard的初衷,但也只能這樣作了。
除此以外,Storyboard只能對應一個UIViewController也意味着這個Controller沒法在被繼承的同時攜帶Storyboard,就算你想利用父類的邏輯進行新的擴展優化也是無能爲力的。
佈局約束的使用場景
佈局約束對於界面設計來講可謂節約了很多工做。不用特別關心某個控件的具體尺寸,而只關心它以怎樣的方式存在於界面中,和其餘控件之間的位置關係如何。
以最原始的方式使用佈局約束,即是手動敲代碼,但Objective-C在這方面可謂極度欠缺便捷性。幾個簡單的約束邏輯都須要敲上好幾十行代碼。好在有其餘第三方庫封裝了這些邏輯並以極簡的方式提供給開發者使用。IB中固然也提供了約束的設置,而且在設置、查看、重置界面這幾個方面來講都寄予了開發者極大的方便。
雖然IB把開發者從繁雜的代碼中解放出來,但並不意味着能在各個方面都如此。在維護方面,IB上的約束顯然沒有那麼便捷。試想一下你接手了一個模塊,某個Storyboard裏的界面處處都是約束,你會做何感想?若是要在此基礎上添加或刪除控件,很容易又把界面弄得一團糟。
解決方法顯然是不要用太複雜的約束,道理和寫代碼同樣。若是界面複雜,說明界面也須要重構,把整個Storyboard裏的界面按功能切分,整理爲不一樣的XIB文件。這樣的代碼對於別人來講,噩夢或許會少一點。