Autolayout(VFL)
1、NSLayoutConstraint
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
format:此参数为你的vfl语句,比如:@"H:|-[button]-|"
opts:枚举参数,默认写0
metrics:这里是一个字典,当在format中使用了动态数据比如上现这句:@"H:|-[button(==width)]-|",表示这个button的宽度为width,那么这个参数去哪里找呢?就是在这个字典里面找到key对就的值,如果没有找到这个值,app会crash
views:是传所有你在vfl中使用到的view,NSDictionaryOfVariableBindings(button).如果你使用到了多个view,就可以这样 NSDictionaryOfVariableBindings(button,button1,button3...),这个名字也要跟参数 format中的一一对应,缺一不可.
2、添加约束
UIView
- (void)addConstraints:(NSArray *)constraints;
3、简单的使用
  UIView *view = [[UIView alloc] init];//如果使用了vfl,可以忽略视图的frame,避免与后面的约束条件冲突
view.backgroundColor = [UIColor grayColor];    view.translatesAutoresizingMaskIntoConstraints = NO;//这一句必须有,如果要实现自动布局,必须将此属性设置为no,否则约束不生效
[self.view addSubview:view];
NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[view]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];//设置约束条件,代表距离父View左右各20像素
NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[view(==200)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];//设置约束,表示距离顶部40像素,view的高度为200
[self.view addConstraints:arr1];//添加约束
[self.view addConstraints:arr];
4、vfl还可以针对两个平级的view进行设置
  NSArray *arr3 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-30-[view1]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view,view1)];//表示View1的纵坐标比view 的多30像素,此时最后一个参数views,需要把涉及的两个view都传进去
 
根据屏幕尺寸设定缩放
5、以iPhone5待屏幕为标准,根据6、6p相对于5的比例进行缩放
6、获取屏幕宽度
#define  WIDTH              [UIScreen mainScreen].bounds.size.width
7、获取比例
#define SCALE (WIDTH/320.0)
8、自定义rect宏
#define CGRect1(x,y,width,heigth)  CGRectMake(x*SCALE, y*SCALE, width*SCALE, heigth*SCALE)
9、使用
  UIView *view = [[UIView alloc] initWithFrame:CGRect1(10, 10, 300, 548)];
 
具体代码:
 
1、
//注意使用VFL,不用设置视图的frame
    UIView *view = [[UIView alloc] init];
    view.backgroundColor = [UIColor brownColor];
    [self.view addSubview:view];
    view.translatesAutoresizingMaskIntoConstraints = NO;//注意,要想使约束条件起作用,必须将此属性设置为no
 
     VFL相关的标识符
     H:代表水平方向
     V:代表垂直方向
     |代表父视图
     - 代表距离 例(H:|-20-)表示距离父视图左侧20像素
     []代表子视图相关属性
     
    //对子视图View进行约束设置,format表示要设置的约束语句,在本句中意思为:view距离父视图左侧30像素,距离父视图右侧20像素(如果没设置具体的数字,且写了-)
    //options代表对其方式,默认写0就行
    //metrics 这里是一个字典,当在format中使用了动态数据比如上现这句:@"H:|-[button(==width)]-|",表示这个button的宽度为width,那么这个参数去哪里找呢?就是在这个字典里面找到key对就的值,如果没有找到这个值,app会crash
    //views 代表约束条件中所涉及的所有视图(父视图除外)
    NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-30-[view]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
    NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[view]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
    [self.view addConstraints:arr];
    [self.view addConstraints:arr1];
 
2、
 
UIView *view = [[UIViewalloc] init];
    view.backgroundColor = [UIColor grayColor];
    [self.view addSubview:view];
    view.translatesAutoresizingMaskIntoConstraints =  NO;
    //[view(>=200)]  表示给view设置尺寸,此时小括号里的关系运算符只能是 == <= >=,注意,改尺寸的值不要与约束冲突,==:约束可以不写,简写成H:[view(==200)]    >=:当左右距离只设置了一个或者都未设置,视图的尺寸为最小值,如果两个都设置时,view 的尺寸为屏幕宽度减去左右距离,此时要保证减后的值>=尺寸最小值
   
    NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[view(>=200)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
     NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[view(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
    [self.view addConstraints:arr1];
    [self.view addConstraints:arr];
 
3、
UIView *view = [[UIView alloc] init];
    view.backgroundColor = [UIColor grayColor];
    [self.view addSubview:view];
    view.translatesAutoresizingMaskIntoConstraints =  NO;
    CGFloat width = 200;
    //当我们在设置约束条件时,距离父视图上下左右的像素值以及view的尺寸不是固定的数字(用某个字符串代替),这时我们需要给metrics设置一个字典,该字典的key必须是约束语句中使用的字符串,对应的value可以自行设置
    //@30表示转化为NSnumber类型的,@(30)表示转化为字符串格式
    NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-left-[view(==width)]" options:0 metrics:@{@"width":[NSNumber numberWithFloat:width],@"left":@30} views:NSDictionaryOfVariableBindings(view)];
    NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[view(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
    [self.view addConstraints:arr1];
    [self.view addConstraints:arr];
 
4、
UIView *view = [[UIView alloc] init];
    view.backgroundColor = [UIColor grayColor];
    [self.view addSubview:view];
    view.translatesAutoresizingMaskIntoConstraints =  NO;
    CGFloat width = 200;
    //当我们在设置约束条件时,距离父视图上下左右的像素值以及view的尺寸不是固定的数字(用某个字符串代替),这时我们需要给metrics设置一个字典,该字典的key必须是约束语句中使用的字符串,对应的value可以自行设置
    NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-left-[view(==width)]" options:0 metrics:@{@"width":[NSNumber numberWithFloat:width],@"left":@30} views:NSDictionaryOfVariableBindings(view)];
    NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[view(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
    [self.view addConstraints:arr1];
    [self.view addConstraints:arr];
   UIView *view1 = [[UIView alloc] init];
    view1.backgroundColor = [UIColor purpleColor];
    [self.view addSubview:view1];
    view1.translatesAutoresizingMaskIntoConstraints = NO;
    //[view1(view)] 代表view1和view某个方向尺寸相同
    NSArray *arr2 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[view1(view)]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view1,view)];
   //V:[view]-[view1]-20-|:子视图view1垂直方向距离平级子视图view 8像素(默认)
    NSArray *arr3 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-[view1]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view,view1)];
    [self.view addConstraints:arr2];
    [self.view addConstraints:arr3];
 
5、 //用VFL实现label自适应
UILabel *label = [[UILabel alloc] init];
    label.backgroundColor = [UIColor grayColor];
    label.numberOfLines = 0;
    label.lineBreakMode = NSLineBreakByCharWrapping;
    label.text = @"hiwehfdiuwehdiowqhdoiwehjdoiuwehdiouwhediuwheioudhewiuodhwehoihiuhiuhiuhiluhiuhiuhiuhihuhuuhhuh";
    [self.view addSubview:label];
    label.translatesAutoresizingMaskIntoConstraints = NO;
    NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label)];
    NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[label]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label)];
    [self.view addConstraints:arr];
    [self.view addConstraints:arr1];
 

Autolayout(VFL)的更多相关文章

  1. 关于AutoLayout(自动布局)那些事儿

    这是博主的WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站,也许您会有兴趣通过RSS,或者通过页面左侧的邮件订阅的方式订阅本站. AutoLayout在去年的WWDC ...

  2. AutoLayout(自动布局)入门

    这是WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站,也许您会有兴趣通过RSS的方式订阅本站. AutoLayout在去年的WWDC上被引入Cocoa,而在今年的WW ...

  3. 【iOS开发】多屏尺的自动适配 AutoLayout (纯代码方式)

    关于AutoLayout,最早从iOS6开始引入使用.   主要功能是使用约束,对视图进行相对布局,以适应不同屏尺的变换.   网上大量的资料都在介绍xib和storyboard,如何使用AutoLa ...

  4. Gephi可视化(二)——Gephi Toolkit叫板Prefuse

    继在园子里写的<Gephi可视化(一)——使用Gephi Toolkit创建Gephi应用>介绍了如何使用Gephi Toolkit工具集进行可视化编程后,本篇对Gephi Toolkit ...

  5. iOS适配(Masonry)

    1.各屏幕大小 设备 尺寸 像素 点 iPhone \ iPhone 3G \ iPhone 3GS 3.5 inch 320 x 480 320 x 480 iPhone 4 \ iPhone 4S ...

  6. Gephi可视化(二)

    继在园子里写的<Gephi可视化(一)——使用Gephi Toolkit创建Gephi应用>介绍了如何使用Gephi Toolkit工具集进行可视化编程后,本篇对Gephi Toolkit ...

  7. 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)

    转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...

  8. iOS开发——UI进阶篇(二)自定义等高cell,xib自定义等高的cell,Autolayout布局子控件,团购案例

    一.纯代码自定义等高cell 首先创建一个继承UITableViewCell的类@interface XMGTgCell : UITableViewCell在该类中依次做一下操作1.添加子控件 - ( ...

  9. Android AutoLayout全新的适配方式 堪称适配终结者(转)

    一.概述 相信Android的开发者对于设配问题都比较苦恼,Google官方虽然给出了一系列的建议,但是想要单纯使用这些建议将设备很轻松的做好,还是相当困难的.个人也比较关注适配的问题,之前也发了几篇 ...

随机推荐

  1. errorlevel

    ------siwuxie095 errorlevel 程序返回码 用法:echo %errorlevel% 查看当前程序返回码(即返回值),以知道程序或命令行是否执行成功. DOS在执行完后都有返回 ...

  2. 一份不错的vue.js基础笔记!!!!

    第一章 Vue.js是什么? Vue(法语)同view(英语) Vue.js是一套构建用户界面(view)的MVVM框架.Vue.js的核心库只关注视图层,并且非常容易学习,非常容易与其他库或已有的项 ...

  3. 真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    在使用eclipse进行整合springmvc时经常会碰到这样的异常: java.lang.ClassNotFoundException:org.springframework.web.context ...

  4. jdk安装和环境变量配置

    jdk的安装和环境变量配置每次换新环境都在做,但是每次都没有认真去想是怎么做的,反正每次打开百度搜索照做就是.这次整理一下,也顺便理清一下其中的原理. 1.第一步当然就是下载jdk,我这边下载的是jd ...

  5. python模块:base64

    base64模块是用来作base64编码解码的,在电子邮件中常见.它可以把不能作为文本显示的二进制数据编码为可显示的文本信息,编码后文本大小增加1/3.常用方法有: b64encode & b ...

  6. Android进程间的通信之Messenger

    Android进程间的通信方式可以通过以下两种方式完成: Android接口定义语言(AIDL) 使用Messenger绑定服务 本文我们将学习使用Messenger绑定服务的方式进行进程间的通信. ...

  7. ElasticSearch 命令行管理工具Curator

    一.背景 elastic官网现在已经大面积升级到了5.x版本,然而针对elasticsearch的命令行管理工具curator现在仍然是4.0版本. 刚开始找到此工具,深深的怕因为版本更迭无法使用,还 ...

  8. Abp项目中的领域模型实体类访问仓储的方法

    首先声明,不推荐使用这种方法.实体访问仓储是不被推荐的! 1.简单粗暴的方法 Abp.Dependency.IocManager.Instance.Resolve>(); 2.绕个弯子的方法 首 ...

  9. iOS10字体

    iOS10字体随着手机系统的字体改变,当我们手机系统字体改变以后,我们的app的lable也会跟着一起变化: 同样的6sp,在iOS9上面运行字体显示是没问题的,当我的手机更新了iOS10以后,有的界 ...

  10. extjs学习之Ext.selection.CheckboxModel

    Ext.onReady( function() { var store=Ext.create('Ext.data.Store', { storeId:'simpsonsStore', fields:[ ...