Masonry 使用总结 2018-08-22

转自:https://github.com/potato512/SYDemo_Masonry

#常用方法

1 添加约束 mas_makeConstraints

2 更新约束、也可以添加新约束 mas_updateConstraints

3 重置之前的约束 mas_remakeConstraints

#使用注意事项

1、使用autolayout之前,一定要将视图添加到父视图上,否则会报错。

2、使用autolayout时,不能同事对同一个视图使用mas_makeConstraints,否则会报错。

3、使用autolayout时,如果非要修改约束时,可使用mas_updateConstraints进行修改更新。

4、使用autolayout时,可使用mas_remakeConstraints清除之前的所有约束,仅保留最新的约束。

5、mas_equal支付的数据类型包括:NSNumber,CGPoint,CGSize,UIEdgeInsets。

6、equalTo与mas_equalTo的区别:equalTo比较的是view,而mas_equalTo比较的是值。

7、边界中顶部、左侧边界的数值为正整数;而底部、右侧边界的数值为负整数(原因在于计算的是绝对的数值,即计算的底部,或右侧边界的数值时,相对的视图底部高度,或右侧宽度,所以要负数)。

8、多个视图的父视图相同时,须先实例化多个视图,且多个视图都添加到视图后才进行约束设置。

9、更新约束后,需要刷新UI布局时,需要调用下面的方法

情况1:实例化UI后,先通过mas_makeConstraints添加约束,然后再通过mas_updateConstraints修改更新某一个约束,然后再调用layoutIfNeeded

情况2:实例化UI后,先通过mas_makeConstraints添加约束,然后再通过mas_remakeConstraints重置所有约束,然后再调用layoutIfNeeded

情况3:实例化UI后,暂不添加约束,后通过updateViewConstraints方法里添加约束mas_updateConstraints,然后再调用setNeedsUpdateConstraints、layoutIfNeeded

#使用设置

1、居中设置

垂直居中:make.centerY.mas_equalTo(self.window.mas_centerY)

水平居中:make.centerX.mas_equalTo(self.window.mas_centerX)

全屏居中:make.center.equalTo(self.window)

2、边界设置

上边界:make.top.equalTo(self.window).with.offset(15.0)

左边界:make.left.equalTo(self.window).with.offset(15.0)

下边界:make.bottom.equalTo(self.window).with.offset(-15.0)

右边界:make.right.equalTo(self.window).with.offset(-15.0)

或:

上边界:make.top.mas_equalTo(15.0)

左边界:make.left.mas_equalTo(15.0)

下边界:make.bottom.mas_equalTo(-15.0)

右边界:make.right.mas_equalTo(-15.0)

或:

上边界、左边界:make.top.left.mas_equalTo(15.0)

下边界、右边界:make.bottom.right.mas_equalTo(-15.0)

或:

make.top.left.bottom.and.right.equalTo(self.window).with.insets(UIEdgeInsetsMake(15.0,15.0,15.0,15.0))

或:

make.edges.equalTo(self.window).with.insets(UIEdgeInsetsMake(15.0,15.0,15.0,15.0))

与另一个视图的边界间距设置

与另一个视图右部边界间距:

make.right.mas_equalTo(currentView.mas_left).offset(10.0);

与另一个视图底部边界间距:

make.top.mas_equalTo(currentView.mas_bottom).offset(10.0);

3、equalTo与mas_equalTo有什么区别?

equalTo比较的是view

mas_equalTo比较的是数值

4、and和with?

什么事情都没做,只是增加代码可读性。

5、倍数设置

设置宽度为self.view的一半,multipliedBy是倍数的意思,也就是,使宽度等于self.view宽度的0.5倍

make.width.equalTo(self.view.mas_width).multipliedBy(0.5);

设置高度为self.view高度的一半

make.height.equalTo(self.view.mas_height).multipliedBy(0.5);

6、大小设置

(1)宽:

make.width.equalTo(self.view.mas_width).multipliedBy(0.5);

或:make.width. mas_equalTo(320.0).multipliedBy(0.5);

或:make.width. mas_equalTo(160.0);

(2)高:make.height.equalTo(self.view.mas_height).multipliedBy(0.5);

或:make.height. mas_equalTo(320.0).multipliedBy(0.5);

或:make.height. mas_equalTo(160.0);

(3)size:make.size. mas_equalTo(CGSizeMake(300.0,50.0));

或:make.size.equalTo(view);

或:make.size.mas_equalTo(CGSizeMake(150.0,50.0)).multipliedBy(0.5);

或:make.edges.equalTo(self.view);

#疑问:

1、UILable如何设置多行显示?

2、UITextView如何设置自适应多行显示? UITextView实始化时,设置的约束只能显示一行,随着输入内容的不断增多,可以在代理方法中实现高度自适应,即重新更新高度约束。

3、UISCrollView如何设置contentSize?

通过过渡视图设置。

(1)containerView为crollView的过渡子视图(垂直设置原理说明);

(2)containerView相对于crollView的约束为make.top.left.bottom.and.right.equalTo(crollView).with.insets(UIEdgeInsetsZero); make.width.equalTo(crollView);

(3)containerView的多个子视图label,且containerView的高度约束最终为最后一个子视图label:make.bottom.equalTo(label.mas_bottom);

(4)containerView的高度约束,即为crollView的垂直方向的高度约束。

4、UITableView如何设置UITableViewCell的高度?

在自自定义,或系统的UITableViewCell中,根据数据model显示,或隐藏UI子视图,以及UILabel的自适应显示(需要先设置多行自适应显示的属性)。同时,在代理方法中设置计算返回的高度。

5、如何处理动画效果?

实现动画效果,即修改更新UI的约束即可,可以使用mas_updateConstraints更新某个约束,也可以使用mas_remakeConstraints清除之前的约束,重新设置所有约束。但不管何种方式,都需要UI所有的父视图调用方法"- (void)layoutIfNeeded;"。

6、如何动态修改约束

使用mas_updateConstraints修改更新某一个约束

使用mas_remakeConstraints,清除之前的所有约束,重新添加约束

7、如何获取约束里设置的值,或是获取约束对象的frame

8、约束中edge、size设置的区别

设置某个子视图的大小与其父视图相同大小时,如frame中设置:label.frame = self.view.bounds;,可以使用size约束,也可以使用edges约束。 *(1)size约束(可能会出现约束异常):make.size.equalTo(self.view); *(2)edges约束(建议使用此方法):make.edges.equalTo(self.view);

你可能感兴趣的:(Masonry 使用总结 2018-08-22)