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、添加约束
- (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(自动布局)那些事儿
这是博主的WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站,也许您会有兴趣通过RSS,或者通过页面左侧的邮件订阅的方式订阅本站. AutoLayout在去年的WWDC ...
- AutoLayout(自动布局)入门
这是WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站,也许您会有兴趣通过RSS的方式订阅本站. AutoLayout在去年的WWDC上被引入Cocoa,而在今年的WW ...
- 【iOS开发】多屏尺的自动适配 AutoLayout (纯代码方式)
关于AutoLayout,最早从iOS6开始引入使用. 主要功能是使用约束,对视图进行相对布局,以适应不同屏尺的变换. 网上大量的资料都在介绍xib和storyboard,如何使用AutoLa ...
- Gephi可视化(二)——Gephi Toolkit叫板Prefuse
继在园子里写的<Gephi可视化(一)——使用Gephi Toolkit创建Gephi应用>介绍了如何使用Gephi Toolkit工具集进行可视化编程后,本篇对Gephi Toolkit ...
- iOS适配(Masonry)
1.各屏幕大小 设备 尺寸 像素 点 iPhone \ iPhone 3G \ iPhone 3GS 3.5 inch 320 x 480 320 x 480 iPhone 4 \ iPhone 4S ...
- Gephi可视化(二)
继在园子里写的<Gephi可视化(一)——使用Gephi Toolkit创建Gephi应用>介绍了如何使用Gephi Toolkit工具集进行可视化编程后,本篇对Gephi Toolkit ...
- 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)
转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...
- iOS开发——UI进阶篇(二)自定义等高cell,xib自定义等高的cell,Autolayout布局子控件,团购案例
一.纯代码自定义等高cell 首先创建一个继承UITableViewCell的类@interface XMGTgCell : UITableViewCell在该类中依次做一下操作1.添加子控件 - ( ...
- Android AutoLayout全新的适配方式 堪称适配终结者(转)
一.概述 相信Android的开发者对于设配问题都比较苦恼,Google官方虽然给出了一系列的建议,但是想要单纯使用这些建议将设备很轻松的做好,还是相当困难的.个人也比较关注适配的问题,之前也发了几篇 ...
随机推荐
- web开发工具软件使用问题记录
一.右键 - 添加Git Bash Here菜单 转自:http://blog.csdn.net/u014527912/article/details/51723735 步骤: 1.通过在“运行”中输 ...
- Singleton in C++11 style
#include <iostream> #include <memory> #include <mutex> class SingletonOld { static ...
- oracle定时器
/* 每10秒钟执行一次 插入一条时间 */ -- 创建table create table tab_time( current_time timestamp ); -- 创建存储过程 create ...
- Light OJ 1028 - Trailing Zeroes (I) (数学-因子个数)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1028 题目大意:n除了1有多少个因子(包括他本身) 解题思路:对于n的每个因子 ...
- gulp LiveReload middleware
用yo搭建的angular项目,用gulp自动化构建. 自动化构建主要的功能大致有: 1. 文件压缩 2. 文件重命名 3. 文件合并 4. css,js文件自动引入到html 5. 自动刷新 ... ...
- lvs+keepalived+nginx实现高性能负载均衡集群
一.为什么要使用负载均衡技术? 1.系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...
- Mongodb无法访问28107的问题
解压mongodb文件后,放到指定文件,最好别有空格.汉字之类的文件中 此时在mongodb文件夹下,建立一个 db 文件夹,此时执行启动命令,默认27017端口号可以打开,但是28017端口无法打开 ...
- win8 vs2010 openni2 配置
打开一个新项目或者已存在的项目用以使用 OpenNI 在Visual Studio 菜单中, 打开项目菜单,选择项目属性. 在C/C++ 选项卡中, 在"常规" 下, 选择 &q ...
- Python执行命令行
背景 我们知道,虽然会破坏平台独立性,但是有的时候需要在代码里面调用命令行来获取一些信息,那么了解在 Python 中如何执行命令行至关重要 使用介绍 Python 中使用命令行可以通过 subpro ...
- ASP.NET ashx实现无刷新页面生成验证码
现在大部分网站登陆时都会要求输入验证码,在网上也看了一些范例,现在总结一下如何实现无刷新页面生成验证码. 效果图: 实现方式: 前台: <div> <span>Identify ...