Autolayout-VFL语言添加约束
一、VFL语言简洁
- VFL(Visual format language)语言是苹果为了简化手写Autolayout代码所创建的专门负责编写约束的代码。为我们简化了许多代码量。
二、使用步骤
使用步骤同手动添加约束保持一致
- 创建控件
- 添加到父控件
- 禁用Aoturesizing
- 添加约束
三、使用方法
- 这里先展示一个实例:
NSArray *blueHArr = [NSLayoutConstraint constraintsWithVisualFormat:
@"H:|-20-[blueView]-20-|"
options:kNilOptions
metrics:nil views:
NSDictionaryOfVariableBindings(blueView)];
- 方法介绍:
constraintsWithVisualFormat:这个方法返回了一个数组;- @
"H:|-20-[blueView(100)]-20-|":这句话表明所添加的约束,H的意思是水平方向添加约束,blueView 视图名称,(100)代表着blueView 的宽为100,blueView距离父类的左边20,距离父类的右边是20; options:是对其方式;metrics:返回的是一个字典,它的意思是可以将约束中的值用某些字符串来代理,然后在这个字典中给多对应的字符串赋值,方便修改,并且增加可读性;views:返回的也是一个字典,这个字典的意思是:你可以将前面的view用其他字符串来代替,在这里在给他赋给对应的view的名字。
- 我可以将上面的约束语句改成如下这样:
NSArray *blueHArr = [NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-aa-[cccc(100)]-20-|"
options:kNilOptions
metrics:@{@"aa":@20}
views:@{@"cccc":blueView}];- 这里我用aa替换了20,cccc替换了blueVuew
- 这里有一个简单的方法,就是使用NSDictionaryOfVariableBindings(blueView)来替换views中的内容也是可以的。
四、VFL的缺点
- VFL语句
不支持乘除法 - 比如我想表示redview是blueview高度的一半,
我们是不能这样写的:NSArray *redVArr = [NSLayoutConstraint
constraintsWithVisualFormat:@"V:[blueView]-20-[redView(==blueView*0.5)]"
options:NSLayoutFormatAlignAllRight
metrics:nil
views:NSDictionaryOfVariableBindings(blueView, redView)];原因就是这里包含了乘法,而一旦
VFL语句中包含了乘除法那么系统就会不识别而崩溃。 - 所以,当一涉及到乘除法的时候,我们又不得不再次使用系统原来的方法中来:
NSLayoutConstraint *redWidth = [NSLayoutConstraint
constraintWithItem:redView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:blueView
attribute:NSLayoutAttributeWidth
multiplier:0.5
constant:0.0];
五、总结
- 苹果虽然推出了这项简单的语言,简化了代码量,也方便了我们用代码来书写约束。
- 但是VFL的缺陷也是很明显的,不支持乘除法的的弊端让它的应用也是大打折扣。
六、示例解释
NSDictionary *views = NSDictionaryOfVariableBindings(_cameraView, _cancelButton);
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_cameraView][_cancelButton(40)]|" options:0 metrics:nil views:views]];
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_cameraView]|" options:0 metrics:nil views:views]];
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_cancelButton]-|" options:0 metrics:nil views:views]];
if (_switchCameraButton) {
NSDictionary *switchViews = NSDictionaryOfVariableBindings(_switchCameraButton);
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_switchCameraButton(50)]" options:0 metrics:nil views:switchViews]];
// V:|[_switchCameraButton(50)] 中 '|'表示距离top,没有值则表示距离top距离为0;(50)表示控件_switchCameraButton的高度为50
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:[_switchCameraButton(70)]|" options:0 metrics:nil views:switchViews]];
}
Autolayout-VFL语言添加约束的更多相关文章
- Autolayout-VFL语言添加约束-备
一.VFL语言简介 VFL(Visual format language)语言是苹果为了简化手写Autolayout代码所创建的专门负责编写约束的代码.为我们简化了许多代码量. 二.使用步骤 使用步骤 ...
- 怎样使用AutoLayOut为UIScrollView添加约束
1.在ViewController中拖入1个UIScrollView,并为其添加约束 约束为上下左右四边与superview对齐 2.在scrollview中,拖入1个UIView,为了便于区分将其设 ...
- 【原】iOS学习之苹果原生代码实现Autolayout和VFL语言
1.添加约束的规则 在创建约束之后,需要将其添加到作用的view上 在添加时要注意目标view需要遵循以下规则: 1)对于 两个同层级view之间 的约束关系,添加到它们的父view上 2)对于 两个 ...
- AutoLayout自动布局之VFL语言代码实现(一个神奇的语言)
一.什么是VFL语言?为什么要VFL语言? VFL全称是Visual Format Language,翻译过来是“可视化格式语言” VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言 ...
- iOS - XIB之AutoLayout添加约束
XIB--AutoLayout添加约束 仿QQ登录界面: 说明:以下各图背景红色只是方便看清楚: 1.创建工程:创建xib文件 2.打开xib文件: (1).创建头像: 拖控件:uiimageview ...
- IOS开发之自动布局--VFL语言
前言:VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言.对于纯代码发烧友,值得我们去学习和了解哦. 1.什么是VFL语言 VFL全称是Visual Format Language,翻 ...
- iOS,自动布局autoresizing和auto layout,VFL语言
1.使用autoresizing 2.使用autolayout 3.VFL语言(Visual Format Language:可视化格式语言) 使用autoresizing 点击xib文件,去掉使用a ...
- iOS:VFL语言
VFL语言 介绍: 什么是VFL语言? VFL全称是Visual Format Language,翻译过来是“可视化格式语言” VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言 ...
- iOS UI布局-VFL语言
什么是VFL语言 VFL(Visual Format Language),“可视化格式语言”. VFL是苹果公司为了简化autolayout的编码而推出的抽象语言. 语法说明 H:[cancelBut ...
随机推荐
- maven 启动 报错 Fatal error compiling: 无效的目标发行版
http://news.tuxi.com.cn/news/119999990123162/31622105.html http://lyking2001.iteye.com/blog/837440 针 ...
- MapReduce中作业调度机制
MapReduce中作业调度机制主要有3种: 1.先入先出FIFO Hadoop 中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业. 2.公平调度器(相当于时间 ...
- Java Performance - 优化和分析Garbage Collection/垃圾收集
随着硬件的不断提升,Java Heap 越来越大,合理的垃圾收集调优变得愈发重要.下面介绍一些最佳实践: 注意: 下面不涉及 IBM AIX Java. 同时不介绍原理,仅仅是建议以及初始配置/最佳实 ...
- PacBio全基因组测序和组装
PacBio公司的业务范围也就5个(官网): Whole Genome Sequencing Targeted Sequencing Complex Populations RNA Sequencin ...
- iOS 静态类库 打包 C,C++文件及和OC混编
iOS 静态类库 编译 C,C++ 我们都知道,OC 原生支持C, 在 创建的 OC类的 .m 里面,可以直接编写C的代码: 同样 Xcode 也支持 OC ,C++的混编,此时,我们通常把OC创建的 ...
- OneProxy主从延迟检测
OneProxy具有主从延迟检测功能,检测方式有两种. 1.通过MySQL本身提供的延迟信息,即在从库中执行show slave status; 查看Seconds_Behind_Master值: 2 ...
- Xml反序列化
XML的反序列化可在类的属性上标记特性来隐射反序列化.例如这种形式 public class PaymentAccount { [XmlAttribute("name")] pub ...
- 【BZOJ 2818】Gcd - 筛法求素数&phi()
题目描述 给定整数,求且为素数的数对有多少对. 分析 首先筛出所有的素数. 我们考虑枚举素数p,统计满足的个数,等价于统计的个数,即统计以内满足互质的有序数对个数. 不难发现,也就是说,我们只要预处理 ...
- Ubuntu下解决bash 没有那个文件或目录的方法
因为之前电脑硬盘坏掉,维修换了新硬盘,今天重新安装了ubuntu,装好之后就赶紧搭建工作环境,将备份的资料拷贝进来,搭建交叉编译环境,但是发现,修改bashrc中PATH绝对路径指向交叉编译器后,在命 ...
- javascript实现对象的继承的方式
在JavaScript将原型链作为实现继承的主要方法.基本原理是利用原型让一个subType引用superType的属性和方法 推荐链接 http://www.jb51.net/article/204 ...