Masnory 多个控件与优先级

来源:互联网 发布:学c语言是用什么软件 编辑:程序博客网 时间:2024/05/17 13:06

1.参考文章
Masonry介绍与使用实践:快速上手Autolayout
IOS自适应前段库-Masonry的使用
我是阅读完成这两篇才开始写masnory的约束的。

2.
当uilabel左右之间相互适应的时候。因为不用设置uilabel左边和右边的宽度,即左边的label不用设置靠右距离,右边的label不用设置靠左的距离,有可能出现右边文字过长造成覆盖在左边文字上,或者相反,这时候需要设置

make.right.equalTo(self.rightLabel.mas_left);

leftlabel的右边等于rightlabel的左边,这样可能出现两种情况。因为uilalbel左+ uilabel右边 = 总宽度

所以会造成uilabel左边宽度变大 或者 uilabel 右边宽度变大。此时masnory会默认左边宽度变大

如果这时候需要在左边label后边添加一个紧紧贴着的红点,或者一个uiimage ,就会发现被贴到右边label附近了,因为左边的label被拉伸了,大半行都被占领了,这时候因为你又不能设置masnory label的宽度,因为label的宽度是由文字自适应的,现在还没传递文字,自然宽度也不知道,于是就有个方法来解决问题

改变先前的那行代码为

make.right.lessThanOrEqualTo(self.rightLabel.mas_left);

是指让leftlabel的右边*小于或者等于*rightlabel的左边,这样就会使得rightlabel的约束的优先级大于或者等于左边的约束,因为leftlabel+ rightlabel = 总宽度,这时候就会将rightlabel向左拉伸,leftLabel保持不变了,这时候小红点的位置就不会错了。就是靠着左边了

        self.titleLabel = [UILabel new];        [self addSubview:self.titleLabel];        self.redPot = [UILabel new];        [self addSubview:self.redPot];        self.rightLabel = [UILabel new];        [self addSubview:self.rightLabel];        [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {            make.centerY.equalTo(self);            make.left.equalTo(@(16));            make.right.lessThanOrEqualTo(self.rightLabel.mas_left);        }];        [self.redPot mas_makeConstraints:^(MASConstraintMaker *make) {            make.centerY.equalTo(self).offset(-8);            make.left.equalTo(self.titleLabel.mas_right).offset(3);            make.width.height.mas_equalTo(@(8));        }];        [self.rightLabel mas_makeConstraints:^(MASConstraintMaker *make) {            make.centerY.equalTo(self);            make.right.equalTo(@(-30));        }];

3.不要赋给tableview的headview使用masnory。不会起效。

0 0
原创粉丝点击