需求1:
对某个控制器上的view上的label进行布局,要求其右侧至少与view水平方向的中心处对齐,宽度随着文字的增加逐渐变宽,但其右侧距离view右侧至少10pt.
使用Masonry
使用Masonry对UILabel进行约束,设置其宽度的最小约束和距离右侧的最大距离
代码:
UILabel * orangeLbl = [UILabel new];
orangeLbl.backgroundColor = [UIColor orangeColor];
[self.view addSubview:orangeLbl];
orangeLbl.text = @"设置最小宽度-";
[orangeLbl mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view.mas_left).offset(10);
make.top.equalTo(self.view.mas_top).offset(200);
make.width.mas_greaterThanOrEqualTo(self.view.frame.size.width * 0.5 - 10); // 设置最小宽度
make.right.mas_lessThanOrEqualTo(self.view.mas_right).offset(-10); // 设置距离右边最小距离
}];
使用到了mas_greaterThanOrEqualTo和mas_lessThanOrEqualTo
需求2
某个控制器上的view上有两个label,左、右两边各一个,两者之间的间距为10pt,左、右两边label的宽度最少为100,但当两个label上的文字都很多的时候首先左侧的label上展示的文字更多。
使用Masonry
这是需要使用Masonry设置UILabel抗压缩的优先级
代码:
UILabel * leftlbl = [UILabel new];
[self.view addSubview:leftlbl];
UILabel * rightLbl = [UILabel new];
[self.view addSubview:rightLbl];
leftlbl.backgroundColor = [UIColor yellowColor];
rightLbl.backgroundColor = [UIColor redColor];
[rightLbl mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view.mas_top).offset(100);
make.right.equalTo(self.view.mas_right).offset(-10);
make.width.mas_greaterThanOrEqualTo(100); // 这是最小宽度
}];
[leftlbl mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view.mas_left).offset(10);
make.top.equalTo(self.view.mas_top).offset(100);
make.right.equalTo(rightLbl.mas_left).offset(-10);
make.width.mas_greaterThanOrEqualTo(100);
}];
leftlbl.text = @"这是左边的文字-";
rightLbl.text = @"这是右边的文字-这是右边的文字-这是右边的文字-";
// 设置抗压缩优先级
[leftlbl setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal];
[rightLbl setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
leftlbl的抗压缩优先级更高,所以leftlbl不容易被压缩,能展示更多的文字。
放个效果图:
放个demo
https://gitee.com/liangsenliangsen/masonry_priority.git
本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。😊