iOS AutoLayout中的Content Hugging 和 Content Compression Resistance優(yōu)先級(jí)問題

關(guān)于autolayout的優(yōu)先級(jí)的問題在網(wǎng)上已經(jīng)有很多資料了,推薦一個(gè):
Autolayout中關(guān)于intrinsic content斩箫、相關(guān)優(yōu)先級(jí)及其應(yīng)用

這篇文章詳細(xì)講解了在使用storyboard中如何設(shè)置Content Hugging 和 Content Compression的優(yōu)先級(jí)纯衍,我這里我就說下怎么使用代碼設(shè)置優(yōu)先級(jí)作為補(bǔ)充蔗衡。用代碼設(shè)置布局一般都使用masonry,所以我就在使用masonry的基礎(chǔ)上寫demo蝙叛。


添加兩個(gè)label

    UILabel* leftLabel = [[UILabel alloc] init];
    leftLabel.backgroundColor = [UIColor redColor];
    [self.view addSubview:leftLabel];
    leftLabel.text = @"人做的畜生之事越多俺祠,內(nèi)心越是痛苦。";
    [leftLabel sizeToFit];
    
    UILabel* rightLabel = [[UILabel alloc] init];
    rightLabel.backgroundColor = [UIColor greenColor];
    [self.view addSubview:rightLabel];
    rightLabel.text = @"1234567890";
    [rightLabel sizeToFit];

設(shè)置布局

    [leftLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.height.equalTo(@(20));
        make.left.equalTo(self.view).offset(10);
        make.centerY.equalTo(self.view);
        make.right.mas_lessThanOrEqualTo(rightLabel.mas_left);
    }];
    
    [rightLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.height.equalTo(@(20));
        make.left.mas_greaterThanOrEqualTo(leftLabel.mas_right);
        make.right.equalTo(self.view).offset(-10);
        make.centerY.equalTo(leftLabel);
    }];

運(yùn)行效果

0.png


在默認(rèn)情況下借帘,我們沒有設(shè)置各個(gè)布局的優(yōu)先級(jí)蜘渣,那么他就會(huì)優(yōu)先顯示左邊的label,左邊的完全顯示后剩余的空間都是右邊的label姻蚓,如果整個(gè)空間寬度都不夠左邊的label的話宋梧,那么右邊的label沒有顯示的機(jī)會(huì)了。

如果我們現(xiàn)在的需求是優(yōu)先顯示右邊的label狰挡,左邊的label內(nèi)容超出的省略捂龄,這時(shí)就需要我們調(diào)整約束的優(yōu)先級(jí)了。

理論

  • 約束優(yōu)先級(jí): 在Autolayout中每個(gè)約束都有一個(gè)優(yōu)先級(jí), 優(yōu)先級(jí)的范圍是1 ~ 1000加叁。創(chuàng)建一個(gè)約束倦沧,默認(rèn)的優(yōu)先級(jí)是最高的1000
  • Content Hugging Priority: 該優(yōu)先級(jí)表示一個(gè)控件抗被拉伸的優(yōu)先級(jí)。優(yōu)先級(jí)越高它匕,越不容易被拉伸展融,默認(rèn)是250。
  • Content Compression Resistance Priority: 該優(yōu)先級(jí)和上面那個(gè)優(yōu)先級(jí)相對(duì)應(yīng)豫柬,表示一個(gè)控件抗壓縮的優(yōu)先級(jí)告希。優(yōu)先級(jí)越高,越不容易被壓縮烧给,默認(rèn)是750

所以默認(rèn)情況下兩邊的label的Content HuggingContent Compression優(yōu)先級(jí)都是一樣的燕偶,為了讓右邊的label完全顯示,那么我們需要增大右邊label的抗壓縮級(jí)础嫡,或者減小左邊label的抗壓縮級(jí)指么,總之是得讓右邊的抗壓縮級(jí)大于左邊的label酝惧,這樣才能讓右邊的label內(nèi)容優(yōu)先顯示。

UIView中關(guān)于Content Hugging 和 Content Compression Resistance的方法有:

- (UILayoutPriority)contentHuggingPriorityForAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);

- (UILayoutPriority)contentCompressionResistancePriorityForAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);

在初始化label里面添加代碼:

[leftLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];

或者

[rightLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];

UILayoutPriority類型實(shí)際上就是float類型伯诬,只要設(shè)置右邊的比左邊的大就可以晚唇。

修改后的效果

1.png

對(duì)于多個(gè)labe或者button利用類似的方法都可以做到優(yōu)先顯示某一個(gè)控件的內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盗似,一起剝皮案震驚了整個(gè)濱河市哩陕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赫舒,老刑警劉巖萌踱,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異号阿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鸳粉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門扔涧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人届谈,你說我怎么就攤上這事枯夜。” “怎么了艰山?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵湖雹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我曙搬,道長(zhǎng)摔吏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任纵装,我火速辦了婚禮征讲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘橡娄。我一直安慰自己诗箍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布挽唉。 她就那樣靜靜地躺著滤祖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓶籽。 梳的紋絲不亂的頭發(fā)上绍填,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天溜族,我揣著相機(jī)與錄音,去河邊找鬼。 笑死洛姑,一個(gè)胖子當(dāng)著我的面吹牛凰荚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼寡喝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了勒奇?” 一聲冷哼從身側(cè)響起预鬓,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赊颠,沒想到半個(gè)月后格二,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竣蹦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年顶猜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痘括。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡长窄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纲菌,到底是詐尸還是另有隱情挠日,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布翰舌,位于F島的核電站嚣潜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏椅贱。R本人自食惡果不足惜懂算,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夜涕。 院中可真熱鬧犯犁,春花似錦、人聲如沸女器。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驾胆。三九已至涣澡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丧诺,已是汗流浹背入桂。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驳阎,地道東北人抗愁。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓馁蒂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親蜘腌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沫屡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容