Content Compression Resistance和Content Hugging
本人轉(zhuǎn)載自:http://codingobjc.com/blog/2015/01/28/autolayoutzhong-de-content-compression-resistancehe-content-huggingdao-di-shi-shi-yao-yi-si/
Auto Layout中,Content Compression Resistance 和 Content Hugging 這兩個(gè)概念,從字面上很難理解它們真正的意思和用途,在蘋果官方文檔中相關(guān)描述也比較少。中文世界沒有與之對(duì)應(yīng)的特別形象的中文翻譯。objc中國(guó)上,將其分別翻譯為內(nèi)容壓縮阻力和內(nèi)容吸附性,這可能一定程度上更加深了理解的難度。
這兩個(gè)概念,一直是一知半解,最近搜索和查看了許多文章和資料才徹底搞清楚了它們的作用,所以在此整理一下。
Intrinsic Content Size
要理解內(nèi)容壓縮阻力和內(nèi)容吸附性這兩個(gè)概念,首先要理解內(nèi)部?jī)?nèi)容尺寸(Intrinsic Content Size)這一概念。
每個(gè)視圖都有內(nèi)容壓縮阻力優(yōu)先級(jí)(Content Compression Resistance Priority)和內(nèi)容吸附性優(yōu)先級(jí)(Content Hugging Priority)。但只有當(dāng)視圖定義了內(nèi)部?jī)?nèi)容尺寸后,這兩種優(yōu)先級(jí)才會(huì)起作用;否則如果都沒有定義內(nèi)容尺寸大小,又如何知道應(yīng)該抗壓縮或者吸附至什么大小呢。
那么,內(nèi)部?jī)?nèi)容尺寸是指的什么,有什么作用呢?
引用自蘋果官方Auto Layout指南里面對(duì)內(nèi)部?jī)?nèi)容尺寸的描述:
Intrinsic Content Size
Leaf-level views such as buttons typically know more about what size they should be than does the code that is positioning them. This is communicated through the intrinsic content size, which tells the layout system that a view contains some content that it doesn’t natively understand, and indicates how large that content is, intrinsically.
For elements such as text labels, you should typically set the element to be its intrinsic size (select Editor > Size To Fit Content). This means that the element will grow and shrink appropriately with different content for different languages. `
什么意思呢?
簡(jiǎn)單來(lái)說(shuō)就是,像按鈕、文本標(biāo)簽這類視圖控件,在布局的時(shí)候,它們自己內(nèi)部比外部布局代碼更清楚自己需要多大的尺寸來(lái)顯示自己的內(nèi)容。而這個(gè)尺寸就是由內(nèi)部?jī)?nèi)容尺寸(intrinsic content size)來(lái)傳達(dá)的。這就相當(dāng)于,內(nèi)部?jī)?nèi)容尺寸告訴布局系統(tǒng):“這個(gè)視圖里面包含了一些你不能理解的內(nèi)容,但是我給你指出了那些內(nèi)容有多大。”
由此可見,內(nèi)部?jī)?nèi)容尺寸是為了實(shí)現(xiàn)視圖自適應(yīng)大小而準(zhǔn)備的。
Content Compression Resistance 與 Content Hugging
關(guān)于這兩個(gè)概念,最容易理解的文檔說(shuō)明在UIView Class Reference文檔里面:
- contentCompressionResistancePriorityForAxis:
Returns the priority with which a view resists being made smaller than its intrinsic size.
- contentHuggingPriorityForAxis:
Returns the priority with which a view resists being made larger than its intrinsic size.
通過以上兩個(gè)接口的說(shuō)明,其意義已經(jīng)相當(dāng)清楚了:內(nèi)容壓縮阻力優(yōu)先級(jí)就是視圖反壓縮的優(yōu)先級(jí),優(yōu)先級(jí)越大,視圖就越不容易被壓小;內(nèi)容吸附性優(yōu)先級(jí)就是視圖反拉伸的優(yōu)先級(jí),優(yōu)先級(jí)越大,視圖就越不容易被拉大。
例子
下面,引用一個(gè)來(lái)自stackoverflow的例子,這個(gè)例子很形象的解釋了內(nèi)容壓縮阻力和內(nèi)容吸附性優(yōu)先級(jí)的作用。
假設(shè),你有一個(gè)下面這樣的按鈕:
| 1 | [ Click Me ] |
按鈕與其父視圖之間的邊距約束優(yōu)先級(jí)是500。
那么,如果按鈕的吸附性優(yōu)先級(jí)(Hugging priority)大于500,按鈕看起來(lái)會(huì)是這樣:
| 1 | [Click Me] |
如果,吸附性優(yōu)先級(jí)小于500,按鈕會(huì)是這樣:
| 1 | [ Click Me ] |
如果現(xiàn)在父視圖收縮了,按鈕的壓縮阻力優(yōu)先級(jí)(Compression Resistance priority)大于500,它看起來(lái)會(huì)是這樣:
| 1 | [Click Me] |
否則,如果壓縮阻力優(yōu)先級(jí)小于500,它會(huì)是這樣:
| 1 | [Cli..] |
如果不是這樣,很可能是其他的一些約束擾亂了你的整個(gè)布局。 例如,你可能將邊距約束優(yōu)先級(jí)設(shè)置成了1000。或者可能是加一個(gè)優(yōu)先級(jí)較高的寬度約束。遇到這種情況,可以試試“Editor > Size to Fit Content”命令。
總結(jié)
因此,我們可以簡(jiǎn)單總結(jié)為:
參考
總結(jié)
以上是生活随笔為你收集整理的Content Compression Resistance和Content Hugging的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS开发之如何跳到系统设置里的各种设置
- 下一篇: 删除已经配置的类库和移除CocoaPod