轉(zhuǎn)自:http://blog.csdn.net/yaozhuoyu/article/details/9798213
如果你看本文章,你可以直接閱讀原文羡儿,謝謝。
本人使用Masonry布局實(shí)現(xiàn)了一下作者的Demo是钥,學(xué)習(xí)一下掠归。
iOS6中引入了AutoLayout,極大的方便了UI元素的布局悄泥,現(xiàn)在已經(jīng)過去一年了虏冻,并且大部分設(shè)備的系統(tǒng)也已經(jīng)升級(jí)到了iOS6,是時(shí)候要使用此項(xiàng)技術(shù)了弹囚。
在AutoLayout的學(xué)習(xí)中有兩個(gè)概念官方文檔講述的不是很清楚厨相,今天花費(fèi)了2個(gè)小時(shí)的時(shí)間研究了一下,在此總結(jié)一下鸥鹉。
Content Hugging 和 Content Compression Resistance
這兩個(gè)屬性對(duì)有intrinsic content size的控件(例如button蛮穿,label)非常重要。通俗的講毁渗,具有intrinsic content size的控件自己知道(可以計(jì)算)自己的大小践磅,例如一個(gè)label,當(dāng)你設(shè)置text灸异,font之后府适,其大小是可以計(jì)算到的。關(guān)于intrinsic content size官方的解釋:
Custom views typically have content that they display of which the layout system is unaware. Overriding this method allows a custom view to communicate to the layout system what size it would like to be based on its content. This intrinsic size must be independent of the content frame, because there’s no way to dynamically communicate a changed width to the layout system based on a changed height, for example.
好了肺樟,了解了intrinsic content size的概念之后檐春,下面就重點(diǎn)討論Content Hugging 和 Content Compression Resistance了。
UIView中關(guān)于Content Hugging 和 Content Compression Resistance的方法有:
- (UILayoutPriority)contentCompressionResistancePriorityForAxis:(UILayoutConstraintAxis)axis
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis
- (UILayoutPriority)contentHuggingPriorityForAxis:(UILayoutConstraintAxis)axis
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis
大概的意思就是設(shè)置優(yōu)先級(jí)的儡嘶。
Hugging priority 確定view有多大的優(yōu)先級(jí)阻止自己變大喇聊。
Compression Resistance priority確定有多大的優(yōu)先級(jí)阻止自己變小。
很抽象蹦狂,其實(shí)content Hugging就是要維持當(dāng)前view在它的optimal size(intrinsic content size)誓篱,可以想象成給view添加了一個(gè)額外的width constraint朋贬,此constraint試圖保持view的size不讓其變大:
view.width <= optimal size
此constraint的優(yōu)先級(jí)就是通過上面的方法得到和設(shè)置的,content Hugging默認(rèn)為250.
Content Compression Resistance就是要維持當(dāng)前view在他的optimal size(intrinsic content size)窜骄,可以想象成給view添加了一個(gè)額外的width constraint锦募,此constraint試圖保持view的size不讓其變小:
view.width >= optimal size
此默認(rèn)優(yōu)先級(jí)為750.
Masonry實(shí)現(xiàn)的Demo演示
Demo地址:https://github.com/JnLuffy/HuggingAndCompressionResitanceDemo1