ios 开发中使用Masonry设置极限约束以及优先级

需求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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值