美文网首页
Masonry深入分析

Masonry深入分析

作者: 涵啸虎 | 来源:发表于2019-03-14 16:27 被阅读0次

我们在项目中常常用到Masonry库来简化视图位置设置。

我们在项目中常常用到Masonry库来简化视图位置设置。这就需要我们对Masonry有一定程度的理解。才能知道我们在使用时少犯错误。

参考资料:

1、iOS 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,注意设置 下和右的数值的正负值。

未完待续......

相关文章

网友评论

      本文标题:Masonry深入分析

      本文链接:https://www.haomeiwen.com/subject/bcjgpqtx.html