約束優先級: 在Autolayout中每一個約束都有一個優先級, 優先級的範圍是1 ~ 1000。建立一個約束,默認的優先級是最高的1000
Content Hugging Priority: 該優先級表示一個控件抗被拉伸的優先級。優先級越高,越不容易被拉伸,默認是250。
Content Compression Resistance Priority: 該優先級和上面那個優先級相對應,表示一個控件抗壓縮的優先級。優先級越高,越不容易被壓縮,默認是750html
有這樣一個cell,底部品牌的長度是不固定的,右邊的車系也是不固定,而且車系的高度會自動換行,numberOfLines=0;針對這樣的cell佈局,若果正常佈局,達到的效果以下:
佈局部分代碼:佈局
[self.brandLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.productNameLb.mas_left); make.top.mas_equalTo(lineView.mas_bottom).mas_offset(10); }]; [self.carTypeLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(lineView.mas_bottom).mas_offset(10); make.left.mas_equalTo(self.brandLabel.mas_right).mas_offset(20); make.right.mas_offset(-10); make.bottom.mas_offset(-10); }];
很明顯這裏的佈局屬於約束衝突的狀況,想要解決這樣的狀況方法也有多種,這裏介紹一種autolayout裏面有一個叫作抗壓縮 抗拉伸的概念 方法以下:ui
- (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水平方向的抗壓縮值,右邊label提升垂直方向抗壓縮值 代碼若是3d
[self.brandLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; //設置水平方向抗壓縮優先級高 水平方向能夠正常顯示 [self.carTypeLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; //設置垂直方向擠壓縮優先級高 垂直方向能夠正常顯示
設置了抗壓縮後達到了效果以下:
code