iOS Masonry 抗壓縮 抗拉伸

約束優先級: 在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

轉載請標註來源 http://www.cnblogs.com/qqcc1388/p/9044927.htmlhtm

相關文章
相關標籤/搜索