Masonry使用的第一天

首先,通过https://github.com/SnapKit/Masonry,点击Clone or download,在弹出的小窗口点击Download Zip,下好之后,打开,将名为“masonry”的文件夹拖入项目,必要时选择Copy items if needed,意思是复制一份。

第一步,在头文件中, #import "Masonry.h"

完成要设置约束的对象的初始化,当其加入到父视图之后,再添加约束,即使用masonry的方法,如下。

@property(nonatomic,strong) UILabel *nameLabel;
@property(nonatomic,strong) UILabel *remarkLabel;

        //_nameLabel
        _nameLabel = [[UILabel alloc]init];
        [self addSubview:_nameLabel];
        [_nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.mas_offset(10);
            make.left.mas_equalTo(20);
            make.right.mas_offset(-10);
            make.height.mas_equalTo(20);
            
        }];

如果将mas_makeConstraints在添加到父视图之前使用,则会carsh。
如果在逻辑上处于前面的视图添加约束中调用了其后视图的mas前缀的约束信息,则会crash。 比如:

        //_nameLabel
        _nameLabel = [[UILabel alloc]init];
        [self addSubview:_nameLabel];
        [_nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.mas_offset(10);
            make.left.mas_equalTo(_remarkLabel.right);
            make.right.mas_offset(-10);
            make.height.mas_equalTo(20);
            
        }];
        //_remarkLabel
        _remarkLabel = [[UILabel alloc]init];
        _remarkLabel.font = [UIFont systemFontOfSize:11];
        _remarkLabel.textColor = [UIColor lightGrayColor];
        [self addSubview:_remarkLabel];

make.left.mas_equalTo(_remarkLabel.right);就会导致crash。

第二步,学习如何使用Masonry的方法 

外部:

[object mas_makeConstraints:^(MASConstraintMaker *make) {
           //添加所有约束
        }];

[object mas_remakeConstraints:^(MASConstraintMaker *make) {
           //添加新的约束
        }];
[object mas_updateConstraints:^(MASConstraintMaker *make) {
          //更新约束,写哪条更新哪条,其他约束不变
        }];

内部:

make.top.mas_offset(self.view.mas_top).mas_offset(10);//顶部距离屏幕10个单位

上面可以简写为 make.top.mas_offset(10);
因此这两个属性的意思分别是

make.top.mas_equalTo(10);//顶部等于10
make.top.mas_offset(10);//顶部距离父视图的mas_top+10个单位,规定向下为正

还有这样

make.width.equalTo(self.view).multipliedBy(0.2);// 设置redView的宽度是self.view宽度的0.2倍。

解释一下:
equalTo:仅支持基本类型
mas_equalTo:支持类型转换,支持复杂类型。是对equalTo的封装。支持CGSize CGPoint NSNumber UIEdgeinsets。

以下实现的是相同的效果

make.width.equalTo(@80);
make.width.mas_equalTo(80);

如何去掉mas_前缀?
去掉mas_前缀,只用equalTo即可,添加到.prefix文件

// 添加这个宏,就不用带mas_前缀
#define MAS_SHORTHAND
// 添加这个宏,equalTo就等价于mas_equalTo
#define MAS_SHORTHAND_GLOBALS
// 这个头文件一定要放在上面两个宏的后面
#import "Masonry.h"

相应设置的属性还有
make.bottom
make.left
make.right
make.width
make.height
make.center
make.size
此时注意同一种约束设置一次,否则就会警告,比如设置了size,再设置windth控制台就会有警告。


猜你喜欢

转载自blog.csdn.net/qq_39551390/article/details/80468348