Masonry使用及注意

来源:互联网 发布:java项目书籍 编辑:程序博客网 时间:2024/06/16 15:41
方法:
  1. mas_makeConstaints;

    创建添加约束

  2. mas_updateConstaints;

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

  3. mas_remakeConstaint;

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

  4. 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已全部初始化。
原创粉丝点击