所谓的VFL语言其实就是Visual format language 的缩写,是一种使用代码添加约束的方式,类似于Masonry  SDAutolayout的效果,但是操作起来可能要相对简单。一行代码就可以实现。

  举一个例子:

UIView *ive1=[UIView new];

ive1.translatesAutoresizingMaskIntoConstraints=NO;

ive1.backgroundColor=[UIColor redColor];

[self.view addSubview:ive1];

UIView *ive2=[UIView new];

ive2.translatesAutoresizingMaskIntoConstraints=NO;

ive2.backgroundColor=[UIColor blueColor];

[self.view addSubview:ive2];

  因为要使用VFL语言,所以就不需要指定固定的frame,但是需要注意的是控件必须先添加到视图上去。

  

NSArray *ive1Arr= [NSLayoutConstraint

constraintsWithVisualFormat:@"H:|-20-[ive1]-20-|" //这个是水平方向的约束,'|'表示父视图

options:NSLayoutFormatAlignAllTop|NSLayoutFormatAlignAllBottom //这是个对齐方式

metrics:nil//这里返回的是一个字典,意思是将约束中的某些值用字符串来代替,字典中给多对应的字符串赋值,方便修改

views:NSDictionaryOfVariableBindings(blueView)];//跟上边相似,返回字典,可用字符串代替,然后给出名字。

//上边的式子等同于

NSArray *ive1Arr =[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-toLeft-[testView]-20-|"options:NSLayoutFormatAlignAllTop|NSLayoutFormatAlignAllBottom metrics:@{@"toLeft":@20} views:@{@"testView":ive1}];

[self.view addConstraints:ive1Arr];//给添加水平方向的约束数组

//给添加垂直方向的数组,高度为五十,距离底边距为10 这种写法会简单一些

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[ive1(50)]-10-|"

options:NSLayoutFormatDirectionLeadingToTrailing

metrics:nil

views:NSDictionaryOfVariableBindings(ive1)]];

注意一个问题,Visual format language 语言里不能出现乘除法,否则会崩溃。这种情况下只能使用另外一个方法

举例(ive1的宽度是ive2宽度的一半):

NSLayoutConstraint *constraintIve1=[NSLayoutConstraint

constraintWithItem:ive1       //目标item

attribute:NSLayoutAttributeWidth //约束类型

relateBy:NSLayoutRelationEqual  //等同于

toItem:ive2             //对比item

attribute:NSLayoutAttributeWidth

multiplier:0.5           //对比的倍数

constant:0.0            //获取到响应的倍数以后增加固定量

];

上边内容为手打字母,直接copy可能会有字符错误。请理解代码意思以后自行书写。

Visual format language的更多相关文章

  1. IOS使用 Visual Format Language 定义水平和垂直约束

    定义限制条件来改变一个 UI 组件在其父视图的水平和垂直方向布局的方法. 可以使用方程式里 H:方向符号代表水平方向的边距,使用 V:方向符号代表垂直方向的边 距. 转载请注明,本文转自:http:/ ...

  2. 使用Auto Layout中的VFL(Visual format language)--代码实现自动布局

    使用Auto Layout中的VFL(Visual format language)--代码实现自动布局 2014-12-09 10:56 编辑: zhiwupei 分类:iOS开发 来源:机智的新手 ...

  3. iOS开发-VFL(Visual format language)和Autolayout

    AutoLayout不管是在StoryBorad还是在xib中都相对来说比较简单,VFL(Visual  fromat  language)可视化语言基本上用到的比较少,在xCode4时候自动布局的概 ...

  4. 使用Auto Layout中的VFL(Visual format language)--代码实现自动布局【转】

    本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:API介绍 NSLayoutConstraint API 1 2 3 ...

  5. 转载自@机智的新手:使用Auto Layout中的VFL(Visual format language)--代码实现自动布局

    本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:API介绍 NSLayoutConstraint API 1 2 3 ...

  6. 【转】使用Auto Layout中的VFL(Visual format language)--代码实现自动布局

    本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:API介绍 NSLayoutConstraint API 1 2 3 ...

  7. VFL(Visual Format Language)语言

    VFL的使用 使用VFL来创建约束数组: +(NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFor ...

  8. 转载:使用Auto Layout中的VFL(Visual format language)--代码实现自动布局

    本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:API介绍 NSLayoutConstraint API 1 2 3 ...

  9. 使用Auto Layout中的VFL(Visual format language)——代码实现自动布局

    本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:api介绍 1.NSLayoutConstraint API NSL ...

随机推荐

  1. 接口返回json

    use Mojolicious::Lite; use JSON qw/encode_json decode_json/; # /foo?user=sri get '/api' => sub { ...

  2. Java用Dijkstra算法实现地图两点的最短路径查询(Android版)

    地图上实现最短路径的查询,据我了解的,一般用Dijkstra算法和A*算法来实现.由于这是一个课程项目,时间比较急,而且自己不熟悉A*算法,所以参考网上的Dijkstra算法(http://blog. ...

  3. 数据库CRUD操作

    CRUD操作: C:create 增加数据: insert into 表名 values('N001','汉族') 普通 insert into 表名 values('','','') 如果有自增长列 ...

  4. npm 常用命令

    npm install xxx 安装模块npm install xxx@1.1.1   安装1.1.1版本的xxxnpm install xxx -g 将模块安装到全局环境中.npm ls 查看安装的 ...

  5. WPF datagrid 初学

    <Window x:Class="WpfDemo.WinDataGrid" xmlns="http://schemas.microsoft.com/winfx/20 ...

  6. 简单C#文字转语音

    跟着微软走妥妥的,C#文字转语音有很多参数我就不说了,毕竟我也是初学者.跟大家分享最简单的方法,要好的效果得自己琢磨喽: 先添加引用System.Speech程序集: using System; us ...

  7. js apply 和call的区别

    function Person(name, profession) { this.name = name; this.profession = profession; this.speak = fun ...

  8. ContentType 属性 MIME

    ".asf" = "video/x-ms-asf" ".avi" = "video/avi" ".doc&qu ...

  9. c++ 学习备忘

    char* 到 LPCTSTR 转换 char *m_str = "test!"; MessageBoxW(CString(m_str)); CString to LPCTSTR ...

  10. java新特性之可变参数

    public class NewDemo01 {     public static void main(String[] args) {         System.out.print(" ...