Masonry 学习笔记

作者: 花与少年_ | 来源:发表于2017-06-20 15:58 被阅读84次

Masonry 用链式语句封装自动化布局,让布局的语句可以更简洁明了,可读性更高。
首先将布局语句封装在 block 中,然后再通过以下方法给视图添加约束

- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;
可以给哪些属性添加约束?
可添加的属性

可以给如图所示的属性添加约束,特别的是,MASConstraintMaker 还提供三个组合的属性:

- (MASConstraint *)edges {   
    return [self addConstraintWithAttributes:MASAttributeTop | MASAttributeLeft | MASAttributeRight | MASAttributeBottom];
} 
- (MASConstraint *)size {   
    return [self addConstraintWithAttributes:MASAttributeWidth | MASAttributeHeight];
} 
- (MASConstraint *)center {   
    return [self addConstraintWithAttributes:MASAttributeCenterX | MASAttributeCenterY];
}

分别将属性组合,方便我们给属性添加约束。

make、update、remake 区别
make

新增 block 中出现的约束

update

更新 block 中出现的约束,主要通过设定 constraintMaker 的 updateExisting 为真,会将之前给 view 添加的所有约束重新安装一遍

remark

会清除之前出现的所有约束,仅保留当前 block 中出现的约束,主要通过设定 constraintMaker 的 removeExisting 为真,会将之前给 view 添加的所有约束移除掉,安装新添的约束

在具体设定约束时,有这么几种方法设定约束
//类似于"="
- (MASConstraint * (^)(id attr))equalTo;
//类似于">="
- (MASConstraint * (^)(id attr))greaterThanOrEqualTo;
//类似于"<="
- (MASConstraint * (^)(id attr))lessThanOrEqualTo;
ContentHuggingPriority、ContentCompressionResistancePriority 区别
ContentHuggingPriority

表示视图抱紧的能力,在父视图变大时,子视图的这个属性优先级越高,越不容易被拉伸,越不会随着父级变大而被拉伸。

ContentCompressionResistancePriority

表示视图抗挤压的能力,在其父视图排列不下子视图时,子视图的这个属性优先级越高,越不容易被挤压,显示的内容越完整。

- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);

其中,UILayoutPriority 有这四个级别表示优先级:
UILayoutPriorityFittingSizeLevel、UILayoutPriorityDefaultLow、UILayoutPriorityDefaultHigh、UILayoutPriorityRequired 用 50、250、750、1000 这四个浮点数表示其优先级,设定时我们也可以通过直接给 priority 设置浮点数,来表示其优先级。

IntrinsicContentSize 是什么?

IntrinsicContentSize 表示视图的固有大小,当这个视图里面已经有一些东西,就会有 IntrinsicContentSize 这个固有大小。
比方说 UILabel 有 text、UIButton 有 textLabel 、UIImageView 有 image 等内部的东西,就会有固有大小,不用特意设置其大小也能显示出来。
而当 view 不含有任何子视图,并且未设定其大小时,就不会显示出来。
可以通过重写视图的 intrinsicContentSize 来提供默认的视图大小。

相关文章

  • iOS框架·Masonry源码深度解析及学习启示:设计模式与链式

    传送门:链式编程小Demo 这篇文章是 Masonry 框架源码的解析和笔记。学习Masonry之前,先了解这个框...

  • Masonry学习笔记

    Masonry Masonry是一个轻量级的布局框架,采用链式语法封装自动布局,简明,高可读。 通常leading...

  • Masonry 学习笔记

    Masonry 用链式语句封装自动化布局,让布局的语句可以更简洁明了,可读性更高。首先将布局语句封装在 block...

  • masonry学习笔记

    一、封装结构 MASConstraint 约束MASCompositeConstraint 一组约束//MASVi...

  • Masonry 学习笔记

    一个轻量级的布局框架, 同时支持 iOS 和 Mac OS X, 采用更优雅的链式语法封装自动布局,语法优雅, 帮...

  • Masonry学习笔记

    Masonry是一个轻量级的布局框架, 对AutoLayout 进行了封装,它拥有自己的描述语法(采用更优雅的链式...

  • Masonry学习笔记

    Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读...

  • masonry

    为什么要做这个笔记 masonry [https://github.com/SnapKit/Masonry]可以说...

  • Masonry笔记

    - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMa...

  • Masonry 笔记

    最近每周末都会看叶孤城的直播,对于我们iOS开发者来说,确实是一个福利,很感谢他们的分享精神,收获到的一些东西特此...

网友评论

    本文标题:Masonry 学习笔记

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