Masonry與iOS自動佈局
開源專案Masonry旨在讓自動佈局(Auto Layout)的程式碼更簡潔、可讀性更強。
Masonry ,“一個輕量級的佈局框架,採用更優雅的語法封裝自動佈局”,不需要使用XIB和Storyboard。它的創造者Jonas Budelmann 論證 了儘管自動佈局很強大,但它很快就變得冗長而不可讀。
Masonry是一種領域特定語言(DSL),為自動佈局的所有功能提供便捷的方法,包括建立和修改約束、存取屬性、設定優先順序以及除錯支援。
GitHub上的示例程式碼展示了Masonry的 典型用法及其簡潔的語法 。
UIEdgeInsets padding = UIEdgeInsetsMake(10 , 10, 10, 10);
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(superview).with.insets(padding);
}];
自動佈局最重要的是 約束 :UI元素間關係的數學表示式。約束包括尺寸、由優先順序和閾值管理的相對位置。它們是 新增劑 ,可能導致約束 衝突 、約束不足造成 佈局無法確定 。這兩種情況都會產生異常。
通過程式設計的方式,不使用Masonry,也可以建立約束:建立 NSLayoutConstraint ,關聯到檢視並指定屬性和關係。Apple也提供了
自動佈局既不是強制的,也不是獨有的方法。“springs and struts”仍然是一種有效的方法。“springs and struts”也就是 autoresizing masks ,決定了一個檢視的父檢視大小變化時,其自身如何變化。
- “Springs and struts”模式需要編寫程式碼來處理各種螢幕方向、尺寸和動態內容。
- iOS 7中的動態型別允許使用者在應用中設定文字大小偏好。
- 支援iOS 6和iOS 7以及它們不同的元素度量。
自動佈局並非完美無缺。Apple提供了一篇
任何型別的自動佈局程式碼意味著你將無法獲得Xcode5提供的Interface Builder增強功能的支援。特別是視覺化地解決自動佈局問題的功能,在assistant editor的預覽模式中檢視各種螢幕方向、尺寸和iOS系統版本下的執行時佈局的功能。
Masonry,其實是簡化了iOS中的autolayout中程式碼實現自動佈局。
總結的經驗就是:
知道控制元件兩兩之間的關係:equalTo lessThanOrEqualTo 還是greaterThanOrEqualTo
對於控制元件的屬性:如圖所示
瞭解了這些,佈局就不是問題了,下原始碼下來自己寫一遍就會了。切勿眼高手低即可。