1.   Masonry的属性

@property (nonatomic,strong,readonly)MASConstraint *left; //左侧

@property(nonatomic,strong,readonly) MASConstraint *top;//上侧

@property(nonatomic,strong,readonly)MASConstraint*right;//右侧

@property(nonatomic,strong,readonly)MASConstraint*bottom; //下侧

@property(nonatomic,strong,readonly)MASConstraint*leading; //首部

@property(nonatomic,strong,readonly) MASConstraint *trailing; //尾部

@property(nonatomic, strong, readonly) MASConstraint *width;   //宽

@property (nonatomic, strong, readonly) MASConstraint *height;  //高

@property(nonatomic, strong, readonly)MASConstraint *centerX; //横向居中

@property(nonatomic, strong,readonly)MASConstraint *centerY;  //纵向居中

@property (nonatomic, strong, readonly) MASConstraint *baseline; //文本基线

2.Masonry给我们提供了3个方法

//新增约束
 - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;

//更新约束
 - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;

//清楚之前的所有约束,只会保留最新的约束
 - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;

3.常见约束的各种类型

1.尺寸:width、height、size

2.边界:left、leading、right、trailing、top、bottom

3.中心点:center、centerX、centerY

4.边界:edges

5.偏移量:offset、insets、sizeOffset、centerOffset

6.priority()约束优先级(0~1000),multipler乘因数, dividedBy除因数

4.Masonry约束易忽略的技术点

使用Masonry不需要设置控件的translatesAutoresizingMaskIntoConstraints属性为NO;

防止block中的循环引用,使用弱引用(这是错误观点),在这里block是局部的引用,block内部引用self不会造成循环引用的

__weak typeof (self) weakSelf = self;(没必要的写法)

5.Masonry约束控件出现冲突的问题

当约束冲突发生的时候,我们可以设置view的key来定位是哪个view

redView.mas_key = @"redView";

greenView.mas_key = @"greenView";

blueView.mas_key = @"blueView";

若是觉得这样一个个设置比较繁琐,怎么办呢,Masonry则提供了批量设置的宏MASAttachKeys

MASAttachKeys(redView,greenView,blueView); //一句代码即可全部设置

6. equalTo mas_equalTo的区别

mas_equalTo只是对其参数进行了一个BOX(装箱) 操作,目前支持的类型:数值类型(NSNumber)、 点(CGPoint)、大小(CGSize)、边距(UIEdgeInsets),而equalTo:这个方法不会对参数进行包装。

7.Masonry 布局
    make.top.equalTo(view).with.offset(10);// 距离上10
    make.left.equalTo(view).with.offset(10);//距离左10
    make.bottom.equalTo(view).with.offset(-10);//距离下10
    make.right.equalTo(view).with.offset(-10);//距离右10

等同于make.edges.mas_offset(UIEdgeInsetsMake(10,10,10,10));

等高 \等宽

make.height.mas_equalTo(@[redView, blueView]);

make.width.mas_equalTo(@[redView, blueView]);

最大值

make.width.height.lessThanOrEqualTo(@250);

最大放大到整个view make.width.height.lessThanOrEqualTo(self.view);

最小值make.width.height.greaterThanOrEqualTo(@90);

优先级最低

make.width.height.mas_equalTo(100 * self.scacle).priorityLow();

设置高/宽为3:1,要求是同一个控件的属性比例

make.height.mas_equalTo(bottomInnerView.mas_width).multipliedBy(3);

*  axisType         轴线方向

*  fixedSpacing     间隔大小

*  fixedItemLength  每个控件的固定长度/宽度

*  leadSpacing      头部间隔

*  tailSpacing      尾部间隔

//首先添加5个视图

NSMutableArray *array = [NSMutableArray new];

for (int i = 0; i < 5; i ++) {

UIView *view = [UIView new];

view.backgroundColor = [UIColor greenColor];

[self addSubview:view];

[array addObject:view]; //保存添加的控件

}

水平方向控件间隔固定等间隔

[array mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:15 leadSpacing:10 tailSpacing:10];

[array makeConstraints:^(MASConstraintMaker *make) {

make.top.equalTo(50);

make.height.equalTo(70);

}];

水平方向宽度固定等间隔

[array mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedItemLength:70 leadSpacing:10 tailSpacing:10];

[array makeConstraints:^(MASConstraintMaker *make) { //数组额你不必须都是view

make.top.equalTo(50);

make.height.equalTo(70);

}];

设置preferredMaxLayoutWidth: 多行label约束的完美解决

[self.label makeConstraints:^(MASConstraintMaker *make) {

make.left.top.equalTo(10);

make.right.equalTo(-10);

}];

更新约束 mas_updateConstraints

// 告诉self.view约束需要更新

[self.view setNeedsUpdateConstraints];

// 调用此方法告诉self.view检测是否需要更新约束,若需要则更新,下面添加动画效果才起作用

[self.view updateConstraintsIfNeeded];

[UIView animateWithDuration:0.3 animations:^{

[self.view layoutIfNeeded];

}];

- (void)updateViewConstraints {

[self.growingButton mas_updateConstraints:^(MASConstraintMaker *make) { }];

[super updateViewConstraints];

}

转载于:https://www.cnblogs.com/shujincai/p/5778704.html

Masonry 控件详解相关推荐

  1. 【转】ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证)...

    [转]ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证) ASP.NET验证控件详解 现在ASP.NET,你不但可以轻松的实现对用户输入的验证,而且,还可以选择验证在服 ...

  2. 常用数据绑定控件详解

    常用数据绑定控件详解 GridView内容详解(1) GridView内容详解(2) DataList内容详解 ListView详解(一) ListView详解(二) 导航控件的高级应用 from:h ...

  3. android自定义组件属性,Android组合控件详解 自定义属性

    组合控件详解 & 自定义属性 组合控件是自定义控件的一种,只不过它是由其他几个原生控件组合而成,故名组合控件. 在实际项目中,GUI 会遇到一些可以提取出来做成自定义控件情况. 一个自定义控件 ...

  4. Switch控件详解

    Switch控件详解 原生效果 5.x 4.x 布局 <Switch android:id="@+id/setting_switch"android:layout_width ...

  5. pythongui日历控件_“五一”快到了,用Python中PyQt5做一个日历,QCalendar控件详解...

    前面内容,我们详细了解了PyQt5中的一些常用控件 精彩内容回顾 Python用PyQt5设计界面,如何正确显示一幅图片,QPixmap控件详解 拥有漂亮的笔刷才能绘制多彩界面,PythonPyQt5 ...

  6. WindowsMediaPlayer 11 控件详解

    WindowsMediaPlayer 11 控件详解 转载别人的VB内容 C#中大多也通用 都是Microsoft的作品 . 属性/方法名: 说明: [基本属性] URL:String; 指定媒体位置 ...

  7. android什么控件能够输入多行文字,Android开发:文本控件详解——EditText(一)基本属性...

    一.简单实例: EditText输入的文字样式部分的属性,基本都是和TextView中的属性一样. 除此之外,EditText还有自己独有的属性. 二.基本属性: hint 输入框显示的提示文本 te ...

  8. Spinner控件详解

    Spinner控件详解 效果图 修改Spinner样式 在介绍之前,先看一下系统原生的样式 6.x & 5.x系统样式 4.x系统样式 官方文档 XML属性 方法 描述 android:dro ...

  9. Qt Quick - Popup控件详解

    Qt Quick - Popup控件详解 Popup是基于Qt Quick中的一种弹出式用户界面控件.它可以和Window或ApplicationWindow一起使用.如果想要确保一个Popup在场景 ...

最新文章

  1. keyshot渲染图文教程_一篇文章教你学会3D建模和渲染 反正我是信了
  2. 【CV项目实战】纯新手如何从零开始完成一个工业级的图像分类任务?
  3. c++趣味小程序_工具类小程序10天增长103万全复盘
  4. Linux优化之IO子系统监控与调优
  5. 自动打包linux,Linux环境下Springboot自动打包发布功能
  6. 【Python】retrying模块使用场景
  7. 二叉树的实现(Java语言描述)
  8. 都不写代码,架构师整天在干啥?
  9. 9月| R社区原创作者免费赠书
  10. js 定义函数的几种方法 以及如何调用
  11. Using TFS2010 Build 提示:Silverlight 4 SDK is not installed解决方法
  12. python中的if语句
  13. 主板开启网络唤醒_网络唤醒bios详细设置图文教程 | 专业网吧维护
  14. 【视频插帧】XVFI: eXtreme Video Frame Interpolation
  15. 参考文献为外文文献时应该采用什么格式啊?
  16. “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面 1
  17. 系统测试分析系统测试设计
  18. 对英国房屋价格建模并预测 ---《量化金融R语言初级教程》
  19. c v语言 小数后20位,V语言学习笔记-30集成C代码库
  20. 基于FPGA的ASK/FSK调制

热门文章

  1. mysql6.1 交叉编译_Armbian系统-mysql-connector-c++-1.1.8版本-交叉编译-安装
  2. lisp如何绘制梯形_建筑考研 | 如何用数据库思维拓宽设计思路?(以清华考研快题为例)...
  3. 设计模式—抽象工厂模式(思维导图)
  4. 数据结构—线索二叉树
  5. leetcode 78.子集 dfs解法
  6. java callable
  7. spring mvc 伪静态处理
  8. hdu 5901 Count primes 素数计数模板
  9. Java中的toString()方法
  10. 图片随鼠标滚动而任意浮动