setContentHuggingPriority和setContentCompressionResistancePriority的使用


當兩個UILabel並排顯示時,如何設置約束,讓 leftLB 和 rightLB 正常顯示就很重要了。

方案1:左右兩個Label的寬度相同,則約束設置如下:

//添加標題約束,左邊的label
[lb mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(bgView.mas_top);
    make.left.equalTo(bgView.mas_left).with.offset(16);
    make.height.equalTo(bgView.mas_height);
    make.width.equalTo(contentLB.mas_width);
}];

//添加內容約束,右邊的label
[contentLB mas_makeConstraints:^(MASConstraintMaker *make) {
    make.right.equalTo(bgView.mas_right).with.offset(-16);
    make.height.equalTo(lb.mas_height);
    make.left.equalTo(lb.mas_right).with.offset(20);
    make.top.equalTo(bgView.mas_top);
    make.width.equalTo(lb.mas_width);
}];

 

方案2:左右兩個Label的寬度不相等,此時需要根據設置setContentHuggingPriority和setContentCompressionResistancePriority來控制哪邊的label拉伸,哪邊的label收縮。

 首先說明:

 ContentHuggingPriority                         ==> 表示當前的Label的內容不想被拉伸

 ContentCompressionResistancePriority   ==> 表示當前的Label的內容不想被收縮

默認情況下: HuggingPriority == 250,  CompressionResistancePriority == 750

需要考慮2種情況,左右2邊數據均不足的時候,誰拉伸?左右2邊數據均充足的時候,誰收縮?

首先解決第一個問題,左右2邊數據均不足的時候,誰拉伸,這個由HuggingPriority控制。如果想讓左邊的內容拉伸,就設置左邊的數值<250(或讓右邊的>250);如果想讓右邊的內容拉伸,就設置右邊的數值<250 (或讓左邊的>250)。左右兩個Label對比,數值越大,越不想被拉伸,結果也不會被拉伸;數值越小,越容易被拉伸。(見圖1)

然后解決第二個問題,左右2邊數據都充足的時候,誰收縮,這個由ContentCompressionResistancePriority控制。如果想讓左邊的內容收縮,就設置左邊的數值<750(或讓右邊的>750);如果想讓右邊的內容收縮,就設置右邊的數值<750(或讓左邊的>750)。(見圖2)

                                                     

                      圖1

 

 

 

                 圖2

 

示例代碼

 

參考鏈接:

https://stackoverflow.com/questions/15850417/cocoa-autolayout-content-hugging-vs-content-compression-resistance-priority

https://www.jianshu.com/p/a04ad6a98a83

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM