Masonry学习札记
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学习札记的更多相关文章
- BITED-Windows8应用开发学习札记之二:Win8应用常用视图设计
感觉自我表述能力有欠缺,技术也不够硬,所以之后的Windows8应用开发学习札记的文章就偏向于一些我认为较难的地方和重点了多有抱歉. 上节课是入门,这节课就已经开始进行视图设计了. Windows应用 ...
- SQL菜鸟学习札记(一)
刚开始学SQL,从最基础的语句开始写,用一个LOL数据库做实验.目前使用的工具是MySQL Workbench,感觉比较顺手,界面没花多久时间就读懂的差不多了,所以目前就使用这个工具来做SQL的学习了 ...
- java学习札记
java学习札记 0x0 学习原因 本来打算大三再去跟着课程去学习java的,但是现在题目越来越偏向java,所以迫于无奈开启了java的学习篇章,同时也正好写个笔记总结下自己学习一门语言的流程. ...
- Java 学习札记(三)免安装版TomCat中tomcat6w.exe的运行
1.使用环境 很多时候我们用的是官网的解压免安装版的Tomcat,相比安装Tomcat除了少了安装步骤以外还少了tomcat6w.exe运行所需要的环境变量,所以一般Java开发免安装版的已经足够使用 ...
- 2.2.1 用户态、内核态的形成 -《zobolの操作系统学习札记》
内核态的出现,让计算机系统的权力向操作系统高度集中了. 操作系统分出内核态和用户态,就是为了进行不同等级的权限管理, 从而更好的适应多用户多任务并发的工作环境. 用户态和内核态的来源 在早期的单进程单 ...
- 2.2 追求并发的极致-线程概论 -《zobolの操作系统学习札记》
2.2 追求并发的极致-线程概论 为了追求程序运行之间的并发性,计算机科学家们发明了进程.为了进一步的追求进程内部的并发性,工程师们又提出了线程. 正是线程的出现,给予了程序员更多地操纵OS的自由,可 ...
- 2.1 动为进程,静为程序 -进程概论 -《zobolの操作系统学习札记》
2.1 动为进程,静为程序 -进程概论 目录 2.1 动为进程,静为程序 -进程概论 问1:发明进程的原因? 问2:现在计算机中的进程的定义是什么? 问3:为什么进程跟处理器的联系更密切? 问4:进程 ...
- 1.4 操作系统的其余功能 -《zobolの操作系统学习札记》
1.4 操作系统的其余功能 操作系统除了虚拟化.并发.存储管理三个主要功能,还有许多子功能,我主要介绍几种常见的功能比如 目录 1.4 操作系统的其余功能 稳定性 高性能 隔离保护 易用性(可视化) ...
- 1.3 操作系统的第三个功能——存储管理功能 -《zobolの操作系统学习札记》
1.3 操作系统的第三个功能--存储管理功能 作者zobol:关于操作系统概论-存储管理功能,我给出下列问题: 目录 1.3 操作系统的第三个功能--存储管理功能 问1:操作系统的文件管理系统主要是负 ...
随机推荐
- npm run build 打包后,如何运行在本地查看效果(Nginx服务)
这段时间,研究了一下vue 打包的很慢的问题.但是当我 npm run build 打包后,在本地查看效果的时候,活生生被我老大鄙视了,因为我打开了XAMPP.他说:你怎么不用Nginx啊?用这个一堆 ...
- "There is no tracking information for the current branch" 解决方法
因为新创建的分支push到远程仓库后没有与本地分支关联,下面语句可以令远程分支与本地分支关联起来 git branch --set-upstream-to=origin/release_3.1.3 r ...
- git 删除与撤回
Git 删除与撤回 标签: git 版本管理 删除文件 撤回删除操作 2017年01月13日 22:56:27786人阅读 评论(0) 收藏 举报 分类: Git(4) 版权声明:本文为博主原创文 ...
- 初遇sass的两个小问题
关于sass大家都知道是一种css的开发工具,原本的css没有变量 参数一类的东西,所以比较死 效率较慢. sass就是在css里面加入了一些编程的元素如变量等,让css能够更灵活,提高效率. 刚接触 ...
- 笨办法33while循环
改了之前的代码,加入while: #coding: utf-8 print("王小狗丑不丑?丑→1:不丑→2") answer = input(">") ...
- 【推荐】HTML5 Word Cloud——中文词云
在线工具: http://timdream.org/wordcloud/# 源码: https://github.com/timdream/wordcloud
- Java调用第三方接口工具类(json、form)
1.JSON值访问 /** * 调用对方接口方法 * @param path 对方或第三方提供的路径 * @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析 ...
- ESP32搭建1.VMware Workstation 12.5下Ubuntu16.04环境搭建(简易搭建)
一.需要下载的资源: 1. 下载VMware Workstation 链接: https://pan.baidu.com/s/1nuDEc3n 密码: 89xc 2. 下载Ubuntu ...
- java IO性能对比----read文件
本次对比内容为:(jdk1.8) fileInputStream:最基本的文件读取(带自己声明的缓冲区) dataInputStream:字节读取,在<java编程思想>一书中描述为使用最 ...
- 【版本更新】开发工具DevExtreme发布v18.2.7|附下载
DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动.Web开发框架,可以直接在Visual Studio集成开发环境,构建 ...