如何使用Masonry mas_makeConstraints来避免冲突?

时间:2016-07-04 08:19:52

标签: ios autolayout constraints masonry

[self.line mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(_line.superview).multipliedBy(0.5);
    }];

[self.line mas_updateConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(_line.superview).multipliedBy(1.66666);
    }];

    "<MASLayoutConstraint:0x14efa7170 UIView:0x14ef3f5a0.centerY == UIView:0x14ef3ec00.centerY * 0.5>",
    "<MASLayoutConstraint:0x15026dcb0 UIView:0x14ef3f5a0.centerY == UIView:0x14ef3ec00.centerY * 1.66666>"

当我尝试更新约束时,会出现冲突,如何正确使用它?

看起来更新操作已创建新约束而不是更改其值。

是否可以在mas_updateConstraints中应用?

我是否必须使用mas_remakeConstraints?

1 个答案:

答案 0 :(得分:0)

Apple文档说:

  

与其他属性不同,可以在创建约束后修改常量。在现有约束上设置常量的效果要好于删除约束并添加一个与旧约束相似的新约束,但具有一个新常量。

让我们在下面粘贴一些基本约束:

[NSLayoutConstraint constraintWithItem:view1
                                 attribute:NSLayoutAttributeTop
                                 relatedBy:NSLayoutRelationEqual
                                    toItem:superview
                                 attribute:NSLayoutAttributeTop
                                multiplier:1.0
                                  constant:padding.top]

根据docmas_updateConstraints应该更改现有约束的常数值,但是乘数不是常数 部分。

根据doc的说法,请改用mas_remakeConstraints,该命令将删除所有现有的,然后再安装新的。