一、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 的宽为100blueView距离父类的左边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语言添加约束的更多相关文章

  1. Autolayout-VFL语言添加约束-备

    一.VFL语言简介 VFL(Visual format language)语言是苹果为了简化手写Autolayout代码所创建的专门负责编写约束的代码.为我们简化了许多代码量. 二.使用步骤 使用步骤 ...

  2. 怎样使用AutoLayOut为UIScrollView添加约束

    1.在ViewController中拖入1个UIScrollView,并为其添加约束 约束为上下左右四边与superview对齐 2.在scrollview中,拖入1个UIView,为了便于区分将其设 ...

  3. 【原】iOS学习之苹果原生代码实现Autolayout和VFL语言

    1.添加约束的规则 在创建约束之后,需要将其添加到作用的view上 在添加时要注意目标view需要遵循以下规则: 1)对于 两个同层级view之间 的约束关系,添加到它们的父view上 2)对于 两个 ...

  4. AutoLayout自动布局之VFL语言代码实现(一个神奇的语言)

    一.什么是VFL语言?为什么要VFL语言? VFL全称是Visual Format Language,翻译过来是“可视化格式语言” VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言 ...

  5. iOS - XIB之AutoLayout添加约束

    XIB--AutoLayout添加约束 仿QQ登录界面: 说明:以下各图背景红色只是方便看清楚: 1.创建工程:创建xib文件 2.打开xib文件: (1).创建头像: 拖控件:uiimageview ...

  6. IOS开发之自动布局--VFL语言

    前言:VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言.对于纯代码发烧友,值得我们去学习和了解哦. 1.什么是VFL语言 VFL全称是Visual Format Language,翻 ...

  7. iOS,自动布局autoresizing和auto layout,VFL语言

    1.使用autoresizing 2.使用autolayout 3.VFL语言(Visual Format Language:可视化格式语言) 使用autoresizing 点击xib文件,去掉使用a ...

  8. iOS:VFL语言

    VFL语言   介绍: 什么是VFL语言? VFL全称是Visual Format Language,翻译过来是“可视化格式语言” VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言 ...

  9. iOS UI布局-VFL语言

    什么是VFL语言 VFL(Visual Format Language),“可视化格式语言”. VFL是苹果公司为了简化autolayout的编码而推出的抽象语言. 语法说明 H:[cancelBut ...

随机推荐

  1. angular-file-upload 中文API

    github地址: https://github.com/nervgh/angular-file-upload Directives(指令) nv-file-drop <!-- 最少配置 --& ...

  2. cocos2dx从入门到精通课程

    一.移动开发基础 二.cocos2dx跨平台理论 三.cocos2dx框架 四.cocos2dx内存管理 五.cocos2dx的事件与消息机制 六.cocos2dx的定时器 七.cocos2dx的渲染 ...

  3. 【CodeVS 1004】四子连棋

    http://blog.csdn.net/u013598409/article/details/43924465 相比于一年半前,代码的掌控能力强了许多. #include <cstdio> ...

  4. Mybatis学习(叁)

    一.resultMap[结果映射  关系映射] 作用:当查询的数据与数据库中的数据不一致(表中字段和实体的属性不一样),通过resultMap进行一次映射. 可以使用简单的做法:(取别名) 二.多表查 ...

  5. Supervisor管理列队

    学习了使用 Beanstalkd 管理队列之后,Supervisor 则是用来监听队列的任务,并在队列存在任务的情况下自动帮我们去执行,免去手动敲 php artisan queue:work 的命令 ...

  6. IOC Container(服务容器)的工作机制

    IOC Container 是laravel的一个核心内容,有了IOC Container在Laravel的强大表现,我们可以在Laravel中实现很大程度的代码维护性.(文档我是看的懵逼懵逼的(*^ ...

  7. 修改IIS文件上传大小限制

    如果要上传的文件比较大,则需在IIS中修改文件上传的大小限制,否则无法上传(表现为程序不报错,而上传进度到100%后没有反应). 点击"管理"下的"配置编辑器" ...

  8. [maven] 常用仓库地址

    共有的仓库 http://mvnrepository.com/ http://repo1.maven.org/maven2/ http://repository.jboss.com/maven2/ h ...

  9. Qt之QSS(QDarkStyleSheet)

    简述 关于样式,前面介绍了很多内容,下面分享一个深色样式表,很值得借鉴! 简述 效果 QSS 更多参考 效果 QSS /* * The MIT License (MIT) * * Copyright ...

  10. Poj 1273 Drainage Ditches(最大流 Edmonds-Karp )

    题目链接:poj1273 Drainage Ditches 呜呜,今天自学网络流,看了EK算法,学的晕晕的,留个简单模板题来作纪念... #include<cstdio> #include ...