Auto Layout Masonry
1. Auto layout
1.1 NSLayoutConstraint
1.1.1 约束类 ios6.0可用 为了更好的适配各个尺寸
1.1.2 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
生成一个约束,也就是给一个视图约束条件,另一个视图也会受到这个约束的影响
参数依次为view1,attr1,=(>=,<=),view2,attr2,multiplier,constant
view1.attr1 = view2.attr2 * multiplier + constant
1.1.3 constraintsWithVisualFormat:options:metrics:views:
俗称 VFT,它能生成一组约束(水平,垂直)
https://www.cnblogs.com/gulong/p/4722806.html
1.1.4 默认生成的约束条件的级别都是最高的1000 (级别范围 0-1000)
1.2 translatesAutoresizingMaskIntoConstraints
1.2.1 UIView的一个属性,
1.2.2 若想约束生效必须设置为YES,此时frame将不会生效
1.3 约束一般一组是4个(上下,左右,宽高),
约束设置多,或者设置少都会出错,此时系统会帮忙处理以保证程序的运行,而且控制台也会打印出具体问题及解决方案。但是如果系统也帮不了你的时候,那就是一个闪退予以反抗。
2. sizeToFit,sizeThatFits,intrinsicContentSize
2.1 sizeToFit 手动调用改变宽高 可重写,需调用父类方法
2.2 sizeThatFits 手动调用获取宽高 可重写,可调用父类方法获取上层更多资源
2.3 intrinsicContentSize 手动调用无意义 可重写,类似默认生成宽高的约束但是级别都不高 <100
@implementation GLLabel
//-(void)sizeToFit{
// [super sizeToFit];
//}
//
//-(CGSize)sizeThatFits:(CGSize)size{
// return CGSizeMake(120, 20);
//}
//
- (CGSize)intrinsicContentSize{
//手动改变后 需要调用invalidateIntrinsicContentSize
return CGSizeMake(, );
}
@end
3. Masonry
3.1 轻量级的自动布局SDK,采用了链式编程的方式简化了代码量 他不仅支持iOS还支持MAC OS X的开发
可下载代码放入代码中,或直接pod install
最后还是调用constraintWithItem:attribute:relatedBy:
toItem:attribute:multiplier:constant:的方法添加的约束
内部很多枚举都是重写的NSLayoutConstraint的枚举,属于一一对应的
为了配合英语语法有一些增强读法的方法,b看来应该会更舒服一点吧(with,and)
a. make.top.left.right.bottom.offset(20)
b. make.top.left.right.and.bottom.offset(20)
3.2 重要类
MASConstraintMaker 引擎类
MASConstraint 约束抽象类,实现了部分方法
MASViewConstraint 视图约束类,所有方法均已实现
MASCompositeConstraint 组合约束类,内部childConstraints为数组,模型为MASViewConstraint
UIView的分类 View+MASAdditions中,简便我们的调用
3.3 具体使用
3.3.1 demo
[label1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.offset(20);
make.top.bottom.right.offset(-50).priority(800);
}];
3.3.2 分析
mas_makeConstraints 为View的分类方法block中会返回约束引擎
make.left 会生成MASViewConstraint对象并被make所持有,并返回该对象
make.left.offset 会将MASViewConstraint的对象的约束constant值该为20
make.right 会生成MASViewConstraint对象并被make所持有,并返回该对象
make.top.bottom 会新生成两个对象(MASViewConstraint对象 & MASCompositeConstraint对象)
MASCompositeConstraint 并且将right和bottom放入childs的数组中
返回MASCompositeConstraint对象
make.top.bottom.right 会新生成一个MASViewConstraint对象,
绑定到MASCompositeConstraint对象上
重新返回MASCompositeConstraint对象
make.top.bottom.right.offset 给MASCompositeConstraint的对象的constant设置值为-50
后续将childs的MASViewConstraint对象都设置-50这个值
make.top.bottom.right.offset(-50).priority(800) 虐
当block执行完之后,引擎make将会执行install装载方法依次执行组合约束的install装载方法后再执行视图约束的install装载方法,最后执行生成约束的方法,至此完毕
4. 番外
4.1 setContentCompressionResistancePriority:forAxis:
默认优先级为750 抗压缩
4.2 setContentHuggingPriority:forAxis:
默认优先级为250 抗拉伸
4.3 云教学中有使用例子
个人信息主页,会员图标紧随个人名字,名字过长会把图标挤到屏幕外
名字label的约束 Compression(默认750)< right(赋值800)<Hugging(重置为900)
Auto Layout Masonry的更多相关文章
- Auto Layout深入理解,及masonry简单介绍
本篇博客是本人在学习自己主动布局过程中对自己主动布局的理解和整理,分三部分介绍,内容可能会有所反复.见谅. 一.autosizing与Auto Layout对照,及Auto Layout简单介绍 1. ...
- iOS Auto Layout
Auto Layout是什么 Auto Layout是一个基于constraint(约束)的布局系统,它根据UI元素之间约束关系来调整UI元素的位置和大小. Auto Layout解决什么问题 更容易 ...
- 从 Auto Layout 的布局算法谈性能
这是使用 ASDK 性能调优系列的第二篇文章,前一篇文章中讲到了如何提升 iOS 应用的渲染性能,你可以点击 这里 了解这部分的内容. http://t.cn/Rc4KbUC 在上一篇文章中,我们提到 ...
- 深入理解Auto Layout 第一弹
本文转载至 http://zhangbuhuai.com/2015/07/16/beginning-auto-layout-part-1/ By 张不坏 2015-07-16 更新日期:2015-07 ...
- 有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?
本文转载至 http://www.cnblogs.com/ios122/p/4832859.html Apple 算是最重视应用开发体验的公司了.从Xib到StoryBoard,从Auto Layou ...
- iOS 开发实践之 Auto Layout
原:http://xuexuefeng.com/autolayout/?utm_source=tuicool 本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自 ...
- 【转】有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?
Apple 算是最重视应用开发体验的公司了.从Xib到StoryBoard,从Auto Layout到Size Class,每一次的更新,都会给iOS应用的开发带来不小的便利.但是,对于绝对多数i ...
- Auto Layout压缩阻力及内容吸附讲解
Auto Layout压缩阻力及内容吸附讲解 本文为投稿文章,作者:梁炜V 在Auto Layout的使用中,有两个很重要的布局概念:Content Compression Resistance 和 ...
- 【Auto Layout】Xcode6及以上版本,创建Auto Layout 约束时产生的一些变化【iOS开发教程】
[#Auto Layout#]Xcode6创建Auto Layout 约束时产生的一些变化 通过两个小Demo来展示下变化: Demo1需求: 为控制器的根视图(图中的“控制器View”)的子 ...
随机推荐
- Docker部署Zabbix监控MariaDB主从同步(Percona Monitoring Plugins for Zabbix)
一.安装Docker并部署Zabbix 建议先配置清华大学的docker-ce yum源,速度有保障:清华大学repo源 1.Zabbix Server节点配置 部署环境: [root@server0 ...
- 通过Hutool 调用远程API接口(POST/GET)
背景:需要调用第三方接口,开启某项任务,用Hutool代替了HttpClient 调用第三方接口,简单粗暴. 代码如下: import java.util.Date; import org.apach ...
- 【AO笔记】有关使用AO基于shp文件创建网络数据集的一个细节
前些日子,和群友交流时提及shp文件创建单一网络数据集的创建问题. 由于项目需求,用shp文件创建网络合适,所以不得不去找一些古老的代码资料... 以前的研究中,创建网络数据集是根据IDatasetC ...
- 亿级流量场景下,大型架构设计实现【全文检索高级搜索---ElasticSearch篇】-- 中
1.Elasticsearch的基础分布式架构: 1.Elasticsearch对复杂分布式机制的透明隐藏特性2.Elasticsearch的垂直扩容与水平扩容3.增减或减少节点时的数据rebalan ...
- jQuery链式编程
链式编程 多行代码合并成一行代码,前提要认清此行代码返回的是不是对象.是对象才能进行链式编程 .html(‘val’).text(‘val’).css()链式编程,隐式迭代 链式编程注意:$(‘div ...
- react native中一次错误排查 Error:Error: Duplicate resources
最近一直在使用react native中,遇到了很多的坑,同时也学习到了一些移动端的开发经验. 今天在做一个打包的测试时,遇到了一个问题,打包过程中报错“Error:Error: Duplicate ...
- mysql 导出数据报错: row must be in range 0-65535
数据导出时,出现错误: 一脸懵逼,百度了下,是导出数量有格式有限制.一开始导出为excel表格式,后改为文本格式,不会报错.
- PhpStorm 常用快捷键
PhpStorm 常用快捷键 File Structure 路径: Main menu > Navigate > File Structure 显示当前文件的类和函数结构,便于查找当前文件 ...
- 应用wavesurfer.js绘制音频波形图小白极速上手总结
一.简介 1.1 引 人生中第一份工作公司有语音识别业务,需要做一个web网页来整合语音引擎的标注结果和错误率等参数,并提供人工比对的语音标注功能(功能类似于TranscriberAG等),(博 ...
- python开发之路-LuffyCity
阅读目录 一.python基础语法 二.python基础之字符编码 三.python基础之文件操作 四.python基础小练习 五.python之函数基础 六.python之函数对象.函数嵌套.名称空 ...