Masonry使用

方法:
  1. mas_makeConstaints;

创建添加约束

  1. mas_updateConstaints;

更新约束,更新与之前冲突的数值,相同对象(括号里的数值)。
可以添加新的约束,但是若与原来的约束冲突(此冲突是造成的约束错误的冲突),AotuLayout会按一定的规则break Constaint解决冲突,或者是某些版本会crash。

  1. mas_remakeConstaint;

清除掉所有的约束重新添加约束。

  1. 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);
    }];
优先级:

priorityHeightpriorityMediumpriorityLow
当然,也可以是指定一个数值。

eg:make.left.equlTo(lable.mas_right).with.priorityLow();
或者make.left.equlTo(lable.mas_right).with.priorityLow(500);
注意:
  1. 在添加约束前,要先将约束添加到父元素上(addSubview)。否则,崩溃:因为不添加的话,在AotuLayout的添加约束方法中,toItem的参数是为nil的。
     MASLayoutConstraint *layoutConstraint
                 = [MASLayoutConstraint constraintWithItem:firstLayoutItem
                                        attribute:firstLayoutAttribute
                                        relatedBy:self.layoutRelation
                                           toItem:secondLayoutItem
                                        attribute:secondLayoutAttribute
                                        multiplier:self.layoutMultiplier
                                         constant:self.layoutConstant];

  1. 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已全部初始化。

你可能感兴趣的:(Masonry使用)