方法:
- mas_makeConstaints;
创建添加约束
- mas_updateConstaints;
更新约束,更新与之前冲突的数值,相同对象(括号里的数值)。
可以添加新的约束,但是若与原来的约束冲突(此冲突是造成的约束错误的冲突),AotuLayout会按一定的规则break Constaint解决冲突,或者是某些版本会crash。
- mas_remakeConstaint;
清除掉所有的约束重新添加约束。
- Reference
约束是对象,也可以通过引用的方式进行修改
[view1 mas_makeConstraints:^(MASConstraintMaker *make)
{
self.topConstraint =
make.top.equalTo(superview.mas_top).with.offset(padding.top);
make.left.equalTo(superview.mas_left).with.offset(padding.left);
}];
优先级:
有priorityHeight,priorityMedium,priorityLow;
当然,也可以是指定一个数值。
eg:make.left.equlTo(lable.mas_right).with.priorityLow();
或者make.left.equlTo(lable.mas_right).with.priorityLow(500);
注意:
- 在添加约束前,要先将约束添加到父元素上(addSubview)。否则,崩溃:因为不添加的话,在AotuLayout的添加约束方法中,toItem的参数是为nil的。
MASLayoutConstraint *layoutConstraint
= [MASLayoutConstraint constraintWithItem:firstLayoutItem
attribute:firstLayoutAttribute
relatedBy:self.layoutRelation
toItem:secondLayoutItem
attribute:secondLayoutAttribute
multiplier:self.layoutMultiplier
constant:self.layoutConstant];
- mas_equalTo 和 equalTo的区别:
mas_equalTo多了类型转换,多用于数值元素,其余时两者是没有多大区别,通用。 多属性时,必须用equalTo(eg:make.left.right.equalTo();)
3 关于使用masonry约束完的控件获取frame的问题
问题:使用Masonry约束完的控件在什么时候能获取正确的frame值?
方法:1 如果是在UIView子类中,调用setNeedsLayout后调用layoutIfNeeded。
2 如果是在VC中, 在viewWillAppear 或者viewDidAppear的方法中可获取UIView的frame
原因:使用Masonry对控件创建约束后,虽然可以改变其frame,但是frame的更新并不是实时的,是在layoutsubview执行之后才更新的(frame方式是边执行边更新),如果想要立即更新,需要调用setNeedsLayout后调用layoutIfNeeded方法,从而立即刷新布局,才可以得到控件正确的frame值。或者是在viewWillAppear 或者viewDidAppear的方法中获取,因为此时的view已全部初始化。