我們知道Masonry是基于NSLayoutConstraint封裝的一個輕量級的布局框架 擁有自己的描述語法 采用更優(yōu)雅的鏈式語法封裝自動布局 簡潔明了 并具有高可讀性 而且同時支持 iOS 和 Max OS X茸习。
為了弄清楚它的原理我們先來看一下蘋果官方文檔 NSLayoutConstraint
constraint:約束凯亮,不僅僅用來表示控件之間的關系莫湘,還可以設置控件的屬性的關系(>、>=必逆、=、<=揽乱、<),還可以用來表示優(yōu)先級priorities(1-1000名眉,required為1000)
當我們添加了必要的約束之后,Auto Layout 就會在這些約束中按照優(yōu)先級從高到低的去找實現(xiàn)這個布局的解決方法(往往一個控件的布局不止一個解決方法)凰棉。如果沒有找到合理方法损拢,會盡可能的實現(xiàn)你想要的結果。更多的約束例子詳見Stack Views 和Understanding Auto Layout?
這里有一個蘋果官方用swift寫的自動布局的例子Auto Layout Cookbook?
Views with Intrinsic Content Size?:(view固有內(nèi)容的大腥鱿)
label探橱、textField申屹、button不需要特意指定寬高,除非你有什么特殊要求隧膏,UIView沒有內(nèi)容需要指定寬高哗讥,UIView如果只想設置坐標不設置大小詳見iOS進階指南試讀之UI篇。 和
Setting the Placeholder Intrinsic Size for a Custom View
imageView布局:
For example, an empty image view does not have an intrinsic content
size. As soon as you add an image, though, its intrinsic content size is
set to the image’s size.
textView布局:
A text view’s intrinsic content size varies depending on the content, on
whether or not it has scrolling enabled, and on the other constraints
applied to the view. For example, with scrolling enabled, the view does
not have an intrinsic content size. With scrolling disabled, by default
the view’s intrinsic content size is calculated based on the size of the
text without any line wrapping. For example, if there are no returns in
the text, it calculates the height and width needed to layout the
content as a single line of text. If you add constraints to specify the
view’s width, the intrinsic content size defines the height required to
display the text given its width.
Content Hugging/Content Compression(抗伸展性胞枕,抗壓縮性)
約束默認:content hugging = 250(priority) ,compression resistance = 750(priority),因此拉伸view比壓縮view容易杆煞。更多信息去看Setting Content-Hugging and Compression-Resistance Priorities?
蘋果推薦盡量使用固有內(nèi)容大小來布局。這樣能減少模糊和沖突的約束腐泻,但是你要自己管理Content Hugging and Compression Resistance priorities.
guidelines
Attributes:
參考文獻:Masonry使用注意篇
Masonry -- 使用純代碼進行iOS應用的autolayout自適應布局