我們平時給有內(nèi)容的控件布局,一般只需要設(shè)置兩個布局就可以確定位置懈万,比如UILabel設(shè)置left,top会通,就可以,而不用設(shè)置寬高沪停,就能夠正常布局裳涛,這就是因為控件有抗壓縮等級,內(nèi)容可以自動撐開寬高舷礼。
如果是固定的文字郊闯,圖片,可以不用設(shè)置邊界虚婿。但如果是網(wǎng)絡(luò)獲取的動態(tài)數(shù)據(jù)然痊,需要考慮內(nèi)容邊界,比如單個label超出顯示范圍剧浸,超出屏幕,需要換行或者壓縮顯示嫌变;多個label需要優(yōu)先顯示哪個躬它,壓縮哪個label。
這就用到了抗膨脹等級和抗壓縮等級
設(shè)置抗膨脹等級(直譯是緊湊等級)倘待,
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis
控件之間內(nèi)容沒有填充滿组贺,那個控件的優(yōu)先級低,哪個就會拉伸失尖,
設(shè)置抗壓縮等級
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis
控件之間內(nèi)容被填充滿,需要壓縮哪個控件菇夸,優(yōu)先級低的會被壓縮
打印控件的緊湊等級和抗壓縮等級
NSLog(@"%f",[label contentHuggingPriorityForAxis:UILayoutConstraintAxisHorizontal]);//250
NSLog(@"%f",[textField contentCompressionResistancePriorityForAxis:UILayoutConstraintAxisHorizontal]);//750
控件的緊湊等級默認為250峻仇,抗壓縮等級為750;
如果是xib創(chuàng)建的控件摄咆,設(shè)置完約束可以看到UILabel緊湊等級為251,其他控件大多為250
xib布局會更加直觀的看到朝蜘,緊湊等級和抗壓縮等級的效果谱醇,當(dāng)xib可修復(fù)報紅時步做,經(jīng)常自動調(diào)整控件的抗壓縮等級
舉兩個開發(fā)中常見的例子:
1.xib方式兩個控件
比如一排兩個label,A全度、B将鸵,如果B長度固定,A長度是不固定的顶掉,A和B左右貼邊顯示,設(shè)置A右大于等于B左宰闰,內(nèi)容很短不會報錯
如果A內(nèi)容很長可能會覆蓋B簿透,會報一個修改抗壓縮優(yōu)先級錯誤萎战,點擊change priority可以自動修復(fù)
所以A很長的時候需要壓縮A舆逃,可以像上面自動修復(fù)抗壓縮等級戳粒,也可以手動設(shè)置A水平抗壓縮等級小于750,A文字多或少都能夠兼容虫啥,效果如下
兩個控件涂籽,如果是代碼布局,不用手動設(shè)置抗壓縮等級
下面展示一個三個Label评雌,代碼布局的例子
2.一排三個label景东,A、B斤吐、C,長度都不固定庄呈,當(dāng)內(nèi)容過長派阱,先壓縮A,再壓縮B颁褂,最后壓縮C颁独,所以抗壓縮等級C>B>A,A右小于等于B左誓酒,B右等于C左。
UILabel *text = UILabel.new;
[self.view addSubview:text];
[text mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view);
make.top.equalTo(self.view).offset(100);
}];
text.text = @"123";
UILabel *text3 = UILabel.new;
[self.view addSubview:text3];
[text3 mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.view);
make.centerY.equalTo(text);
}];
text3.text = @"UILabelUILabelUILabelUILabelUILabelUILabelUILabelUILabel";
UILabel *text2 = UILabel.new;
[self.view addSubview:text2];
[text2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(text3.mas_left);
make.centerY.equalTo(text);
make.left.greaterThanOrEqualTo(text.mas_right);
}];
text2.text = @"AAAA";
[text setContentCompressionResistancePriority:730 forAxis:UILayoutConstraintAxisHorizontal];
[text2 setContentCompressionResistancePriority:740 forAxis:UILayoutConstraintAxisHorizontal];
[text3 setContentCompressionResistancePriority:750 forAxis:UILayoutConstraintAxisHorizontal];