标签:
[NSLayoutConstraint constraintWithItem:(id)item 指定约束右边的视图view1
attribute:(NSLayoutAttribute)attribute 属性
relatedBy:(NSLayoutRelation)relation 指定左右两边的视图的关系relation
toItem:(id)otherItem 指定约束右边的视图view2
attribute:(NSLayoutAttribute)otherAttribute 属性
multiplier:(CGFloat)multiplier 指定一个与view2属性相乘的乘数multiplier
constant:(CGFloat)constant] 指定一个与view2属性相加的浮点数constant
[NSLayoutConstraint constraintWithItem:view1
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:view2
attribute:NSLayoutAttributeRight
multiplier:1
constant:10]
附视图的属性和关系的值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
typedef NS_ENUM(NSInteger, NSLayoutRelation) { NSLayoutRelationLessThanOrEqual = -1, //小于等于 NSLayoutRelationEqual = 0, //等于 NSLayoutRelationGreaterThanOrEqual = 1, //大于等于 }; typedef NS_ENUM(NSInteger, NSLayoutAttribute) { NSLayoutAttributeLeft = 1, //左侧 NSLayoutAttributeRight, //右侧 NSLayoutAttributeTop, //上方 NSLayoutAttributeBottom, //下方 NSLayoutAttributeLeading, //首部 NSLayoutAttributeTrailing, //尾部 NSLayoutAttributeWidth, //宽度 NSLayoutAttributeHeight, //高度 NSLayoutAttributeCenterX, //X轴中心 NSLayoutAttributeCenterY, //Y轴中心 NSLayoutAttributeBaseline, //文本底标线 NSLayoutAttributeNotAnAttribute = 0 //没有属性 }; NSLayoutAttributeLeft /NSLayoutAttributeRight 和NSLayoutAttributeLeading /NSLayoutAttributeTrailing 的区别是left/right永远是指左右,而leading/trailing在某些从右至左习惯的地区会变成,leading是右边,trailing是左边。NSArray *constraintH = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(>=0)-[imageView]-[label]-(>=0)-|"
options:0
metrics:nil
views:viewsDictionary];
|
NSArray *constraintH =
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(>=0)-[imageView]-[label]-(>=0)-|" 此参数为你的vfl语句
options:0 枚举参数,默认写0,具体跟据你所实现的需求去选择你想要的枚举
metrics:nil metrics:这里是一个字典,当在format中使用了动态数据比如上现这句:@"H:|-[button(==width)]-|",表示这个button的宽度为width,那么这个参数去哪里找呢?就是在这个字典里面找到key对就的值,如果没有找到这个值,app就会crash.
views:viewsDictionary]; 这是传所有你在vfl中使用到的view,
NSLayoutConstraint
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts
metrics:(NSDictionary *)metrics
views:(NSDictionary *)views;
2.UIView API
1
2
|
UIView - (void)addConstraints:(NSArray *)constraints; |
在上面1中返回值类型是NSArray,而现在这个方法的参数也刚好是一个NSArray类型。那么直接把上一个方法的返回值当作这个方法的参数就可以了。如果你有多个VFL,你也可以利用可变数组( NSMutableArray)把这多个VFL返回的数据拼在一起,然后再调用addConstraints:方法。
具体看代码
NSArray *constraints1=[NSLayoutConstraint constraintsWithVisualFormat:@
"H:|-[button]-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(button)];
这里的意思是:button在水平方向上距离它的superView,左右各20px,比如在这里他的大小就是320-20*2=280.在@"H:|-[button]-|"这个语句中,其中"H:"是表示这是水平方向上的约束,"|"是表示superView,"-"表示一个间隔空间,这个间隔如果是如superView之间的,那么就是20px,如果是两个同级别的view,比如@"[button]-[button1]",那么这里表示的是8px.
NSArray *constraints2=[NSLayoutConstraint constraintsWithVisualFormat:@
"V:|-20-[button(==30)]"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(button)];
PS:值得注意的是,在用代码创建的UIView在,一定要加上下面这句代码
1
|
button.translatesAutoresizingMaskIntoConstraints=NO; |
如果没有上面这一行,你的约束将不生效,控制台会输出一连串的错误.
如果这样的话就是等等宽等高了
NSArray *constraints3=[NSLayoutConstraint constraintsWithVisualFormat:@
"H:|-[button1(button)]"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(button1,button)];
NSArray *constraints4=[NSLayoutConstraint constraintsWithVisualFormat:@
"V:[button]-[button1(button)]"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(button1,button)];
三:最后对格式的字符串作一个总结介绍
功能 表达式
水平方向 H:
垂直方向 V:
Views [view]
SuperView |
关系 >=,==,<=
空间,间隙 -
优先级 @value
标签:
原文地址:http://www.cnblogs.com/liuweiqiang11188/p/5384500.html