基于Masonry的两个UILabel水平布局

1,455 阅读1分钟

UI开发的时候会遇到两个UILabel并列显示,但是屏幕宽度有限,所以可能会存在不能全部显示的情况,这个时候需要考虑怎么设置约束布局。

有两种方式去处理

使用greaterThanOrEqualTo,lessThanOrEqualTo。需要提供一个确定值

使用setContentHuggingPriority:forAxis: ,setContentCompressionResistancePriority:forAxis:

  • setContentHuggingPriority:forAxis: 抗拉伸,值越低,就会在宽度多余的情况下,被拉伸。
  • setContentCompressionResistancePriority:forAxis: 抗压缩,值越低,就会在宽度不够的情况下,被压缩。
@interface ViewController ()

@property (nonatomic, strong) UILabel *lLabel;
@property (nonatomic, strong) UILabel *rLabel;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setupViews];
}

- (void)setupViews {
    self.view.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:self.lLabel];
    [self.view addSubview:self.rLabel];

    [self.lLabel mas_makeConstraints:^(MASConstraintMaker *make) {        make.leading.offset(16);        make.top.offset(100);        make.trailing.mas_equalTo(self.rLabel.mas_leading).offset(-20);    }];
    [self.rLabel mas_makeConstraints:^(MASConstraintMaker *make) {        make.trailing.offset(-16);        make.top.offset(100);    }];
    
//    //setContentHuggingPriority 抗拉伸,值越低,就会在宽度多余的情况下,被拉伸。
//    //setContentCompressionResistancePriority 抗压缩,值越低,就会在宽度不够的情况下,被压缩。

    
    //lLabel全部展示(如果lLabel内容太长,rLabel不会展示)
//    [self.lLabel setContentHuggingPriority:(UILayoutPriorityRequired) forAxis:(UILayoutConstraintAxisHorizontal)];
//    [self.rLabel setContentCompressionResistancePriority:(UILayoutPriorityFittingSizeLevel) forAxis:(UILayoutConstraintAxisHorizontal)];
    
    //lLabel全部展示(如果lLabel内容太长,rLabel不会展示)
//    [self.lLabel mas_updateConstraints:^(MASConstraintMaker *make) {
//        make.width.greaterThanOrEqualTo(@0);
//    }];
    
    
    
//    //rLabel全部展示(如果rLabel内容太长,lLabel不会展示)
//    [self.lLabel setContentHuggingPriority:(UILayoutPriorityFittingSizeLevel) forAxis:(UILayoutConstraintAxisHorizontal)];
//    [self.rLabel setContentCompressionResistancePriority:(UILayoutPriorityRequired) forAxis:(UILayoutConstraintAxisHorizontal)];
    
    //rLabel全部展示(如果rLabel内容太长,lLabel不会展示)
//    [self.rLabel mas_updateConstraints:^(MASConstraintMaker *make) {
//        make.width.greaterThanOrEqualTo(@0);
//    }];
    
    
//    //两个都展示,写在前面的会优先展示更多内容
//    [self.lLabel mas_updateConstraints:^(MASConstraintMaker *make) {
//        make.width.greaterThanOrEqualTo(@100);
//    }];
//    [self.rLabel mas_updateConstraints:^(MASConstraintMaker *make) {
//        make.width.greaterThanOrEqualTo(@100);
//    }];
//    //这里指定谁压缩,不写就看上面的顺序
//    [self.lLabel setContentCompressionResistancePriority:(UILayoutPriorityFittingSizeLevel) forAxis:(UILayoutConstraintAxisHorizontal)];

    
//    //lLabel设置最大宽度
//    [self.lLabel mas_updateConstraints:^(MASConstraintMaker *make) {
//        make.width.lessThanOrEqualTo(@100);
//    }];
    
//    //rLabel设置最大宽度
//    [self.rLabel mas_updateConstraints:^(MASConstraintMaker *make) {
//        make.width.lessThanOrEqualTo(@100);
//    }];
    
    self.lLabel.text = @"asdasdajladdawwwdasadadadsadasdadakladdn";
    self.rLabel.text = @"addhjkhkhkhkhkjsdsaadaad";

}

- (UILabel *)lLabel {
    if (!_lLabel) {
        _lLabel = [UILabel new];
        _lLabel.textColor = [UIColor greenColor];
        _lLabel.backgroundColor = [UIColor orangeColor];
    }
    return _lLabel;
}

- (UILabel *)rLabel {
    if (!_rLabel) {
        _rLabel = [UILabel new];
        _rLabel.textColor = [UIColor redColor];
        _rLabel.textAlignment = NSTextAlignmentRight;
        _rLabel.backgroundColor = [UIColor blueColor];
    }
    return _rLabel;
}

@end