Masonry用法上也比较简单灵活,很大程度上替代了传统的NSLayoutConstraint布局方式,是目前最流行的AutoLayout框架.
一、Masonry基本知识:
1.Masonry
会自动调用
view.translatesAutoresizingMaskIntoConstraints=NO;
2.属性 left/right/top/bottom/size/height/width/CenterY 等对齐属性不能设置固定值,但可以设置和superview的相对值
3.三种尺寸关系:
equalTo = NSLayoutRelationEqual
lessThanOrEqualTo = NSLayoutRelationLessThanOrEqual//小于等于
greaterThanOrEqualTo = NSLayoutRelationGreaterThanOrEqual//大于等于
4.使用makeConstraints、updateConstraints和remakeConstraints
-(NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;
-(NSArray*)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block ;
-(NSArray*)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block ;
mas_makeConstraints只负责新增约束 Autolayout不能同时存在两条针对于同一对象的约束否则会报错 mas_updateConstraints针对上面的情况会更新在block中出现的约束不会导致出现两个相同约束的情况 mas_remakeConstraints 则会清除之前的所有约束仅保留最新的约束。
二、代码事例:简单的登录界面:
-(
void
)setLoginPage
{
__weak typeof ( self ) weakSelf = self ;
// 使用 mas_makeConstraints 添加约束
// 登录
_loginLabel . textAlignment = NSTextAlignmentCenter ;
[ _loginLabel mas_makeConstraints :^( MASConstraintMaker *make) {
// 添加大小约束( make 就是要添加约束的控件 view )
make. size . mas_equalTo (CGSizeMake( 100 , 20 ));
make. left . equalTo ((weakSelf.view.bounds.size.width- 100 )/ 2 );
make. right . equalTo (-((weakSelf.view.bounds.size.width- 100 )/ 2 ));
make. top . equalTo ( 60 );
}];
// 帐号
_accountsLabel . textAlignment = NSTextAlignmentCenter ;
[ _accountsLabel mas_makeConstraints :^( MASConstraintMaker *make) {
// 添加大小约束( make 就是要添加约束的控件 view )
make. size . mas_equalTo (CGSizeMake( 60 , 20 ));
make. left . equalTo ( 60 );
make. top . equalTo (_loginLabel). mas_equalTo ( 80 );
}];
// 帐号输入
_accountsText . textAlignment = NSTextAlignmentCenter ;
[ _accountsText mas_makeConstraints :^( MASConstraintMaker *make) {
// 添加大小约束( make 就是要添加约束的控件 view )
make. size . mas_equalTo (CGSizeMake( 120 , 30 ));
make. right . equalTo (- 60 );
make. top . equalTo (_accountsLabel). mas_equalTo (- 5 );
}];
// 密码
_passWordLabel . textAlignment = NSTextAlignmentCenter ;
[ _passWordLabel mas_makeConstraints :^( MASConstraintMaker *make) {
// 添加大小约束( make 就是要添加约束的控件 view )
make. size . mas_equalTo (_accountsLabel);
make. left . equalTo (_accountsLabel);
make. top . equalTo (_accountsLabel). mas_equalTo ( 60 );
}];
// 密码输入
_passWordText . textAlignment = NSTextAlignmentCenter ;
[ _passWordText mas_makeConstraints :^( MASConstraintMaker *make) {
// 添加大小约束( make 就是要添加约束的控件 view )
make. size . mas_equalTo (_accountsText);
make. right . equalTo (- 60 );
make. top . equalTo (_passWordLabel). mas_equalTo (- 5 );
}];
{
__weak typeof ( self ) weakSelf = self ;
// 使用 mas_makeConstraints 添加约束
// 登录
_loginLabel . textAlignment = NSTextAlignmentCenter ;
[ _loginLabel mas_makeConstraints :^( MASConstraintMaker *make) {
// 添加大小约束( make 就是要添加约束的控件 view )
make. size . mas_equalTo (CGSizeMake( 100 , 20 ));
make. left . equalTo ((weakSelf.view.bounds.size.width- 100 )/ 2 );
make. right . equalTo (-((weakSelf.view.bounds.size.width- 100 )/ 2 ));
make. top . equalTo ( 60 );
}];
// 帐号
_accountsLabel . textAlignment = NSTextAlignmentCenter ;
[ _accountsLabel mas_makeConstraints :^( MASConstraintMaker *make) {
// 添加大小约束( make 就是要添加约束的控件 view )
make. size . mas_equalTo (CGSizeMake( 60 , 20 ));
make. left . equalTo ( 60 );
make. top . equalTo (_loginLabel). mas_equalTo ( 80 );
}];
// 帐号输入
_accountsText . textAlignment = NSTextAlignmentCenter ;
[ _accountsText mas_makeConstraints :^( MASConstraintMaker *make) {
// 添加大小约束( make 就是要添加约束的控件 view )
make. size . mas_equalTo (CGSizeMake( 120 , 30 ));
make. right . equalTo (- 60 );
make. top . equalTo (_accountsLabel). mas_equalTo (- 5 );
}];
// 密码
_passWordLabel . textAlignment = NSTextAlignmentCenter ;
[ _passWordLabel mas_makeConstraints :^( MASConstraintMaker *make) {
// 添加大小约束( make 就是要添加约束的控件 view )
make. size . mas_equalTo (_accountsLabel);
make. left . equalTo (_accountsLabel);
make. top . equalTo (_accountsLabel). mas_equalTo ( 60 );
}];
// 密码输入
_passWordText . textAlignment = NSTextAlignmentCenter ;
[ _passWordText mas_makeConstraints :^( MASConstraintMaker *make) {
// 添加大小约束( make 就是要添加约束的控件 view )
make. size . mas_equalTo (_accountsText);
make. right . equalTo (- 60 );
make. top . equalTo (_passWordLabel). mas_equalTo (- 5 );
}];
}