标签:
VFL语言
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
NSDictionaryOfVariableBindings(...)
具体实例如下:
在控制器view底部添加2个view,1个蓝色,1个红色
2个view宽度、高度永远相等
距离父控件左边、右边、下边间距和2个view之间的间距相等
//创建view1 UIView *view1 = [[UIView alloc]init]; view1.backgroundColor = [UIColor blueColor]; view1.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:view1]; //创建view2 UIView *view2 = [[UIView alloc]init]; view2.backgroundColor = [UIColor redColor]; view2.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:view2];
//使用VFL语言生成约束 NSDictionary *metrics = @{@"margin":@20,@"height":@200}; //NSDictionary *views = @{@"view1":view1,@"view2":view2}; //作用与下面的字典一样 NSDictionary *views = NSDictionaryOfVariableBindings(view1,view2);
//获取view1、view2水平方向上的约束 NSArray *conts = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-margin-[view1]-margin-[view2(==view1)]-margin-|" options:0 metrics:metrics views:views];
//获取view1竖直方向的约束 NSArray *conts2 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[view1(height)]-margin-|" options:0 metrics:metrics views:views];
//获取view2竖直方向上的约束 NSArray *conts3 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[view2(==view1)]-margin-|" options:0 metrics:metrics views:views];
//在父视图上添加VFL语言生成的约束 [self.view addConstraints:conts]; [self.view addConstraints:conts2]; [self.view addConstraints:conts3];
//创建view1 UIView *view1 = [[UIView alloc]init]; view1.backgroundColor = [UIColor blueColor]; view1.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:view1]; //创建view2 UIView *view2 = [[UIView alloc]init]; view2.backgroundColor = [UIColor redColor]; view2.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:view2];
//使用VFL语言生成view1的约束 NSDictionary *metrics = @{@"height":@100,@"margin":@20}; NSDictionary *views = NSDictionaryOfVariableBindings(view1,view2);
//获取水平方向上view1的约束 NSArray *constr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-margin-[view1]-margin-|" options:0 metrics:metrics views:views]; //获取竖直方向上view1和view2的约束 NSArray *constr2 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-margin-[view1(height)]-margin-[view2(==view1)]" options:0 metrics:metrics views:views];
#pargma mark -使用Autolayout给view2创建约束
//创建view2右边与父视图右边的约束 NSLayoutConstraint *lcRight = [NSLayoutConstraint constraintWithItem:view2 attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:-20];
//创建view2左边与父视图中心处的约束 NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:view2 attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
//将AutoLayout创建的约束添加到父视图中 [self.view addConstraints:@[lcRight,constraint]]; //将VFL生成的约束添加到父视图中 [self.view addConstraints:constr]; [self.view addConstraints:constr2];
标签:
原文地址:http://www.cnblogs.com/XYQ-208910/p/4898895.html