iOS Masonry 抗壓縮 抗拉伸


約束優先級: 在Autolayout中每個約束都有一個優先級, 優先級的范圍是1 ~ 1000。創建一個約束,默認的優先級是最高的1000
Content Hugging Priority: 該優先級表示一個控件抗被拉伸的優先級。優先級越高,越不容易被拉伸,默認是250。
Content Compression Resistance Priority: 該優先級和上面那個優先級相對應,表示一個控件抗壓縮的優先級。優先級越高,越不容易被壓縮,默認是750

有這樣一個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里面有一個叫做抗壓縮 抗拉伸的概念 方法如下:

  • (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提高垂直方向抗壓縮值 代碼如果

    [self.brandLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];  //設置水平方向抗壓縮優先級高 水平方向可以正常顯示
    [self.carTypeLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];  //設置垂直方向擠壓縮優先級高 垂直方向可以正常顯示

設置了抗壓縮后達到了效果如下:

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


免責聲明!

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



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