如上图需求:
1.左侧label固定位置,不能压缩
2.中间label长度过长是可以被压缩
3.label3不能压缩,保持在label2的右侧,且不超过cell右侧
知识点:
1.uiview的方法,用于label2的压缩性能
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis API_AVAILABLE(ios(6.0));
参数1 UILayoutPriority:抗压等级,越高越无法压缩,越低越会被压缩
UILayoutPriorityRequired 无法压缩
UILayoutPriorityDefaultHigh
UILayoutPriorityDefaultLow
UILayoutPriorityFittingSizeLevel 可以压缩
参数2 UILayoutConstraintAxis:方向
UILayoutConstraintAxisHorizontal 水平方向
UILayoutConstraintAxisVertical 垂直方向
2.Masonry中的优先级,用于label3的布局
priorityHigh() 高优先级,布局有冲突时优先使用
priorityLow() 低优先级,布局有冲突时不会使用
代码如下:
UIView *bg = [UIView new];
bg.backgroundColor = [UIColor lightGrayColor];
// 固定宽度
UILabel *label1 = [UILabel new];
label1.text = @"固定宽度";
[bg addSubview:label1];
[label1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(bg);
make.left.equalTo(bg).offset(10);
}];
// [label1 setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];//不可以被压缩,尽量显示完整
// 可压缩不定长度文本
UILabel *label2 = [UILabel new];
label2.text = str;
label2.textColor = [UIColor blueColor];
[bg addSubview:label2];
[label2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(label1.mas_right).offset(10);
make.centerY.equalTo(bg);
}];
[label2 setContentCompressionResistancePriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisHorizontal];//宽度不够时,可以被压缩
// 靠左固定
UILabel *label3 = [UILabel new];
label3.text = @"置顶";
label3.textColor = [UIColor redColor];
label3.layer.borderColor = [UIColor redColor].CGColor;
label3.layer.borderWidth = 1;
label3.layer.cornerRadius = 5;
[bg addSubview:label3];
[label3 mas_makeConstraints:^(MASConstraintMaker *make) {
// 在设置left和right的时候,需要对left使用高优先级,需要对right使用低优先级。
make.left.equalTo(label2.mas_right).offset(10).priorityHigh();
make.right.equalTo(bg).offset(-10).priorityLow();
make.centerY.equalTo(bg);
make.height.mas_equalTo(30);
}];
return bg;
补充:
抗拉方法
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis API_AVAILABLE(ios(6.0));