Masnory学习札记

  在之前的文章里有草草提到过Masonry自动布局,可这么重要第三方布局框架的怎么可以怎么随便带过呢!昨天在完成页面的时候刚好遇到了被Masorny功能惊叹的部分,所以趁热打铁写下了这篇札记,记录一下方便日后回忆。

一、概念

  Autolayout最重要的是约束:UI元素之间关系的数学表达式。约束包括尺寸、由优先级和阈值管理的相对位置。但约束冲突和约束不足都会造成布局无法确定,从而产生异常报错。

  Masonry是公认非常简洁优美的一款Autolayout框架,也是纯手写代码关于页面布局经历了MagicNumber -> autoresizingMask -> autolayout三个时期后的优秀产物。在Apple的Developer的官方文档中是这么描述Auto Layout的,“Auto Layout dynamically calculates the size and position of all the views in your view hierarchy, based on constraints placed on those views.”(自动布局根据视图上的约束动态计算视图层次结构中所有视图的大小和位置)。Masonry作为一个轻量级的布局框架 ,拥有自己的描述语法 ,采用更优雅的链式语法封装自动布局, 简洁明了 并具有高可读性, 而且同时支持 iOS 和 Max OS X。【此处要区别于jsp、html等其他环境下的Masonry,我将要描述的是在ios开发环境下的Masonry】。虽然在.storyboard的Interface Bulider Document面板上有Auto Layout的选项,但在实际项目中往往是团队合作此时控件拖拽的开发模式就被摒弃了,因为纯手写代码更容易规范化也易于团队协作,这样Masonry的好处就显露出来了。

二、使用

1.Masonry 支持的属性与NSLayoutAttrubute的对照表

2.基本使用

  • mas_makeConstraints:添加约束
  • mas_updateConstraints:更新约束、亦可添加新约束(需触发)
  • mas_remakeConstraints:重置之前的约束

  • multipler属性表示约束值为约束对象的乘因数, dividedBy属性表示约束值为约束对象的除因数,可用于设置view的宽高比

  • priorityLow()设置约束优先级
  • #define MAS_SHORTHAND_GLOBALS 使用全局宏定义,可以使equalTo等效于mas_equalTo
  • #define MAS_SHORTHAND 使用全局宏定义, 可以在调用masonry方法的时候不使用mas_前缀

  --注意约束视图对象只有在被addSubview之后,才能给视图添加约束--

3.项目中的例子

  为了适应可以动态变化的页面,我给注册按钮增加了布局约束的更新操作。实现效果如下:

  

    //未展开情况下的注册按钮的masonry

      [self addSubview:_registerBtn];//添加约束对象
[_registerBtn mas_makeConstraints:^(MASConstraintMaker *make) {//添加约束
make.top.equalTo(_password.mas_bottom).offset( * kScaleH);
make.left.equalTo(self).offset();
make.right.equalTo(self).offset(-);
make.height.mas_equalTo();
}];
[_referrerBtn addTarget:self action:@selector(registerBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; //展开后收起按钮的设置
UIButton *arrow=[[UIButton alloc]init];
[arrow setImage:[UIImage imageNamed:@"log_ic_triangle_up.png"] forState:UIControlStateNormal];
[arrow addTarget:self action:@selector(closeClick:) forControlEvents:UIControlEventTouchUpInside];
[rf addSubview:arrow];
[arrow mas_makeConstraints:^(MASConstraintMaker *make){
make.centerY.equalTo(rf);
make.right.equalTo(rf).offset(-*kScaleH);
make.height.mas_equalTo();
}]; //打开推荐人cell
-(void)openClick:(UIButton *)sender{
_referrerBtn.hidden=YES;
rf.hidden=NO;
[_registerBtn mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(_password.mas_bottom).offset( * kScaleH);
}];
} //收起推荐人cell
-(void)closeClick:(UIButton *)sender{
_referrerBtn.hidden=NO;
rf.hidden=YES;
[_registerBtn mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(_password.mas_bottom).offset( * kScaleH);
}];

参考网页:Masonry介绍与使用实践iOS Autolayout之Masonry解读Masonry使用注意篇iOS Auto Layout官方文档

Mac Gif制作软件良心推荐:Giphy Capture (免费)【好看又好用,最关键免费啊!!!】

Masonry学习札记的更多相关文章

  1. BITED-Windows8应用开发学习札记之二:Win8应用常用视图设计

    感觉自我表述能力有欠缺,技术也不够硬,所以之后的Windows8应用开发学习札记的文章就偏向于一些我认为较难的地方和重点了多有抱歉. 上节课是入门,这节课就已经开始进行视图设计了. Windows应用 ...

  2. SQL菜鸟学习札记(一)

    刚开始学SQL,从最基础的语句开始写,用一个LOL数据库做实验.目前使用的工具是MySQL Workbench,感觉比较顺手,界面没花多久时间就读懂的差不多了,所以目前就使用这个工具来做SQL的学习了 ...

  3. java学习札记

    java学习札记 0x0 学习原因  本来打算大三再去跟着课程去学习java的,但是现在题目越来越偏向java,所以迫于无奈开启了java的学习篇章,同时也正好写个笔记总结下自己学习一门语言的流程. ...

  4. Java 学习札记(三)免安装版TomCat中tomcat6w.exe的运行

    1.使用环境 很多时候我们用的是官网的解压免安装版的Tomcat,相比安装Tomcat除了少了安装步骤以外还少了tomcat6w.exe运行所需要的环境变量,所以一般Java开发免安装版的已经足够使用 ...

  5. 2.2.1 用户态、内核态的形成 -《zobolの操作系统学习札记》

    内核态的出现,让计算机系统的权力向操作系统高度集中了. 操作系统分出内核态和用户态,就是为了进行不同等级的权限管理, 从而更好的适应多用户多任务并发的工作环境. 用户态和内核态的来源 在早期的单进程单 ...

  6. 2.2 追求并发的极致-线程概论 -《zobolの操作系统学习札记》

    2.2 追求并发的极致-线程概论 为了追求程序运行之间的并发性,计算机科学家们发明了进程.为了进一步的追求进程内部的并发性,工程师们又提出了线程. 正是线程的出现,给予了程序员更多地操纵OS的自由,可 ...

  7. 2.1 动为进程,静为程序 -进程概论 -《zobolの操作系统学习札记》

    2.1 动为进程,静为程序 -进程概论 目录 2.1 动为进程,静为程序 -进程概论 问1:发明进程的原因? 问2:现在计算机中的进程的定义是什么? 问3:为什么进程跟处理器的联系更密切? 问4:进程 ...

  8. 1.4 操作系统的其余功能 -《zobolの操作系统学习札记》

    1.4 操作系统的其余功能 操作系统除了虚拟化.并发.存储管理三个主要功能,还有许多子功能,我主要介绍几种常见的功能比如 目录 1.4 操作系统的其余功能 稳定性 高性能 隔离保护 易用性(可视化) ...

  9. 1.3 操作系统的第三个功能——存储管理功能 -《zobolの操作系统学习札记》

    1.3 操作系统的第三个功能--存储管理功能 作者zobol:关于操作系统概论-存储管理功能,我给出下列问题: 目录 1.3 操作系统的第三个功能--存储管理功能 问1:操作系统的文件管理系统主要是负 ...

随机推荐

  1. Scratch安装使用教程

    一.说明 一直听说scratch是一款麻省理工所开发的很好的少儿编程学习工具,一直不是很清楚所谓少儿编程是长什么样所以探究了一下. 二.安装 scratch当前到了3.0版本,3.0版本默认直接是we ...

  2. Robot Framework自动化使用

    自动化测试框架---Robot Framework Robot Framework是用Python语言写的,所以在安装Robot Framework以前必须安装Python环境.Robot Frame ...

  3. Win10系列:C#应用控件进阶5

    多线形 多线形和多边形类似,不同点在于多线形中最后一个点和第一个点不会默认被连接.在多线形的点集中,可以存在同一个开始点和终结点因而会定义成闭合图形.下面将演示如何使用Polyline控件绘制一个多线 ...

  4. iSlide——图标库、图示库的用法

    iSlide中,有一个“图示库”功能,主要功能是同时排列多块文字或多张图片.单击插图库,会弹出一个新的对话框.从中,可以选择权限.分类.数量数据和样式,也可以直接搜索.   下面就举一个例子:我要开一 ...

  5. UVa LA 3266 - Tian Ji -- The Horse Racing 贪心,不只处理一端,也处理另一端以理清局面 难度: 2

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  6. 6ci

  7. 坦克大战学习笔记-TankWar

    最近学习了马士兵老师直播的单机版坦克大战,模仿的做了一个,整理一下思路记录下来,项目git地址:https://github.com/zhuchangli/TankWar/tree/master 视频 ...

  8. Linux内核分析--进程创建,执行,切换

    学号:351 原创作品转载请注明出处本实验来源 https://github.com/mengning/linuxkernel/ 实验要求 从整理上理解进程创建.可执行文件的加载和进程执行进程切换,重 ...

  9. python之路-bytes数据类型

    一. python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.python 3不会以任意隐式的方式混用 ...

  10. Python知识体系思维导图:

    基础知识 数据类型 1.序列 2.字符串 3.列表和元组 4.字典和集合 循环 & 判断