纯代码Autolayout的三种方法
Autolayout讲解较多的就是xib和storyboard用法,本文主要记录纯代码的Autolayout使用方法:
方法1.苹果原生的方法,这种方法虽然简单但是太过繁杂,可用性很差
//宽度=superView高度
[superView addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:superView attribute:NSLayoutAttributeWidth multiplier: constant:]];
//高度=40
[superView addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier: constant:]];
//view1底部距离superView底部距离为0
[superView addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:superView attribute:NSLayoutAttributeBottom multiplier: constant:]];
方法2.VFL方法:
//view1距离superview两端距离都为0
[superView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view1]|" options: metrics:nil views:NSDictionaryOfVariableBindings(view1)]];
//view1高度为40,距离底端距离为0
[superView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view1(==40)]" options: metrics:nil views:NSDictionaryOfVariableBindings(view1)]];
- V:[view1][view2(==view1)]|
- V表示竖直布局(vertical),先是一个view1,其下方紧接一个宽度等于view1宽度的view2,view2距离父视图底部边缘距离为0
- H:|-[view1]-[view2]-[view3(>=20)]-|
- H表示水平布局,view1距离父视图左边缘默认间隔宽度,之后是view2距离view1间隔默认宽度;再之后是宽度不小于20的view3,它和view2以及父视图右边缘的间距都是默认宽度。(竖线'|‘ 表示superview的边缘,“-|”表示默认距离,“|”表示距离边缘为0)
注意:
-(void)addConstraint:(NSLayoutConstraint *)constraint;
用来将约束添加到view。在添加时唯一要注意的是添加的目标view要遵循以下规则:
1.对于两个同层级view之间的约束关系,添加到他们的父view上

2对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上

3对于有层次关系的两个view之间的约束关系,添加到层次较高的父view上

方法3.第三方库Masonry
[view1 setTranslatesAutoresizingMaskIntoConstraints:NO];
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.width.equalTo(superView);
make.height.equalTo(@40);
}];
//上下左右边距
-(void)masonryTest1{ UIView *blueView=[[UIView alloc]init];
blueView.backgroundColor=[UIColor blueColor];
[self.view addSubview:blueView]; UIView *redView=[[UIView alloc]init];
redView.backgroundColor=[UIColor redColor];
[self.view addSubview:redView]; [blueView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.width.mas_equalTo(100);
// make.height.mas_equalTo(100);
// make.left.equalTo(self.view.mas_left).with.offset(10);
// make.top.equalTo(self.view.mas_top).with.offset(20); make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(, , , ));
}]; [redView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(blueView.mas_height);
make.left.equalTo(blueView.mas_right).with.offset();
make.right.equalTo(self.view.mas_right).with.offset(-);
make.top.equalTo(blueView.mas_top).with.offset(); }]; }
// test2: 中心点与self.view相同,宽度为400*400
-(void)masonryTest2{
UIView *view = [UIView new];
[view setBackgroundColor:[UIColor redColor]];
[self.view addSubview:view];
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.view);
make.size.mas_equalTo(CGSizeMake(,));
}];
}
参考原文档:
http://blog.csdn.net/sxfcct/article/details/8776928
http://www.zhihu.com/question/37095424
masonry下载网址:
https://github.com/SnapKit/Masonry
纯代码Autolayout的三种方法的更多相关文章
- YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法
上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...
- 编写Java程序_输入三个整数x,y,z,请把这三个数由小到大输出,请写出实现代码。(3种方法)
要求说明: 输入三个整数x,y,z,请把这三个数由小到大输出. 实现代码: 第1种方法: import java.util.Scanner; public class xyzMaxMin{ publi ...
- Eclipse远程调试Java代码的三种方法
Eclipse远程调试Java代码的三种方法, 第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试, 第2种方法可以调试Java程序启动过程,但是Ecli ...
- 纯Css绘制三角形箭头三种方法
在制作网页的过程中少不了绘制类似图片的三角形箭头效果,虽然工程量不大,但是确实麻烦.在学习的过程中,总结了以下三种方法,以及相关的例子. 一.三种绘制三角形箭头方法 1.方法一:利用overflow: ...
- Viewing the interface of your Swift code,查看Swift代码的头文件的三种方法
Technical Q&A QA1914 Viewing the interface of your Swift code Q: How do I view the interface ...
- Vue-Vue文本渲染三种方法 {{}}、v-html、v-text
{{ }} 将元素当成纯文本输出 v-htmlv-html会将元素当成HTML标签解析后输出 v-textv-text会将元素当成纯文本输出 代码: <!DOCTYPE html> < ...
- Java实现ping功能的三种方法及Linux的区分
前大半部份转自:https://blog.csdn.net/futudeniaodan/article/details/52317650 检测设备的运行状态,有的是使用ping的方式来检测的.所以需要 ...
- 像画笔一样慢慢画出Path的三种方法(补充第四种)
今天大家在群里大家非常热闹的讨论像画笔一样慢慢画出Path的这种效果该如何实现. 北京-LGL 博客号@ligl007发起了这个话题.然后各路高手踊跃发表意见.最后雷叔 上海-雷蒙 博客号@雷蒙之星 ...
- JAVA之线程同步的三种方法
最近接触到一个图片加载的项目,其中有声明到的线程池等资源需要在系统中线程共享,所以就去研究了一下线程同步的知识,总结了三种常用的线程同步的方法,特来与大家分享一下.这三种方法分别是:synchroni ...
随机推荐
- Python数据分析之文本处理词频统计
1.项目背景: 原本计划着爬某房产网站的数据做点分析, 结果数据太烂了,链家网的数据干净点, 但都是新开楼盘,没有时间维度,分析意义不大. 学习的步伐不能ting,自然语言处理还的go on 2.分析 ...
- 就这么简单!构建强大的WebShell防护体系
接触web安全中,例如上传一句话WebShell实现上传文件的功能,再通过上传的多功能WebShell,执行病毒文件最终创建远程连接账号,达到入侵目标服务器的效果.我们可以看到,webshell在整个 ...
- Ionic2 启动加载优化总结
1. ionic2通过ionic serve生成的main.js大于4M,必须先build才能部署 npm run ionic:build --prod 之后main.js缩小为大概100K+ 2. ...
- Access network
1 State transfering A•Mobility:开机-搜寻PLMN/CELL来发现自己在网络中的位置•Attach request•Auth request•Auth res ...
- Html5与本地App资料整理分析
最近开发了一个小的手机网站,重新了解了本地应用,html5,混合应用,webApp等概念,整理下相关的资料,略带自己的思考 用户固有的使用习惯 在<2012年度 HTML5状况及发展形势报告.p ...
- (转)zabbix之生产案例
原文: https://www.abcdocker.com/abcdocker/category/zabbix/ 原文: https://chegva.com/1170.html
- vs2013 调试libevent 源码
自己内功的提升,无非是向前辈学习和修炼自身,对于编码也是如此,学习优秀的库只有从 源代码学起,才能深刻理解库实现的来龙去脉,加深自己的理解,提升自己的功力. 今天就介绍一下vs2013 下面调试lib ...
- 在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案
方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...
- ListView性能优化——convertView&viewHolder
ListView优化大致从以下几个角度:1.复用已经生成的convertView:2.添加viewHolder类:3.缓存数据(图片缓存):4.分页加载. 具体方案: 1.如果自定义适配器,那么在ge ...
- ClouderManager集群在Linux里浏览器默认是英文,在Win里浏览器是中文,怎么更改?(图文详解)
不多说,直接上干货! 问题详情 在这里面如何英文改中文的吗? 莫非要把linux的语言环境给改了?? 我找找网页的语言字体怎么更改下 找到对应页面,修改成中文 解决办法 刷新下,即可 欢迎大家,加入我 ...