我们在项目中常常用到Masonry库来简化视图位置设置。
我们在项目中常常用到Masonry库来简化视图位置设置。这就需要我们对Masonry有一定程度的理解。才能知道我们在使用时少犯错误。
参考资料:
2、frame, contentSize, contentOffset, contentInset 区别联系浅析
基础API更新约束和布局
mas_makeConstraints() 添加约束 【constraint 约束】
mas_remakeConstraints() 解除之前的约束,重新添加新的约束
mas_updateConstraints() 更新约束,写哪条更新哪条,其他约束不变
《问》mas_remakeConstraints()和mas_updateConstraints()有何异同??
通过阅读massary库对上述方法的原始描述,我们看到
mas_remakeConstraints()和mas_updateConstraints()都是创建约束生成器。
当block完成后定义过的约束被驾到视图或者适当的父视图上。
上述约束是在操作视图已经加载到指定"视图"上为前提的。如果违反此原则会引起程序崩溃。
另外,make和remake方法都有新建立约束的过程,需要确保设置的完整性,否则视图将不会被展示。
区别:
mas_updateConstraints(),对于已存在的约束对象,调用此方法会更新约束的变化。更新的属性设置可以是部分的,只写需要更新的部分
mas_remakeConstraints(),是先解除旧的约束。
equalTo(). 参数是对象类型,一般是视图对象或者mas_width这样的坐标系对象
mas_equalTo() 和上面功能相同,参数可以传递基础数据类型对象,可以理解为比上面的API更强大
《问》mas_equalTo()比equalTo()强大在哪?
width() 用来表示宽度,例如代表view的宽度
mas_width() 用来获取宽度的值。和上面的区别在于,一个代表某个坐标系对象,一个用来获取坐标系对象的值
更新约束和布局
- (void)updateConstraintsIfNeeded 调用此方法,如果有标记为需要重新布局的约束,则立即进行重新布局,内部会调用updateConstraints方法- (void)updateConstraints 重写此方法,内部实现自定义布局过程- (BOOL)needsUpdateConstraints 当前是否需要重新布局,内部会判断当前有没有被标记的约束- (void)setNeedsUpdateConstraints 标记需要进行重新布局
边缘尺寸设置方法1,上左下右,equalTo与offset配合
[self.middleDownView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.middleUpView).with.offset(pad);
make.left.equalTo(self.middleUpView).with.offset(pad);
make.bottom.equalTo(self.middleUpView).with.offset(-pad);
make.right.equalTo(self.middleUpView).with.offset(-pad);
}];
注意offset是向右,向下为正值。
边缘尺寸设置方法2,edges.equalTo与UIEdgeInsetsMake配合。注意UIEdgeInsetsMake是指距离上左下右的距离。方向性与offset不同。
[self.middleDownView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.middleUpView).with.insets(UIEdgeInsetsMake(pad, pad, pad, pad));
}];
对比方法1、方法2,注意设置 下和右的数值的正负值。
未完待续......