ios开发autolayout之VFL语言使用总结

来源:互联网 发布:最新电视直播软件 编辑:程序博客网 时间:2024/06/05 02:42

1.about VFL language


示例:

H:[cancelButton(72)]-12-[acceptButton(50)]
canelButton72acceptButton50,它们之间间距12

H:[wideView(>=60@700)]
wideView宽度大于等于60point,该约束条件优先级为700(优先级最大值为1000,优先级越高的约束越先被满足)

V:[redBox][yellowBox(==redBox)]
竖直方向上,先一个redBox,其下方紧接一个高度等于redBox高度yellowBox

H:|-10-[Find]-[FindNext]-[FindField(>=20)]-|
水平方向上Find距离父view左边缘默认间隔宽度,之后是FindNext距离Find间隔默认宽度;再之后是宽度不小于20FindField,它和FindNext以及父view右边缘的间距都是默认宽度。(竖线“|表示superview的边缘)

VFL的使用:

使用VFL来创建约束数组+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;format :VFL语句opts :约束类型metrics :VFL语句中用到的具体数值views :VFL语句中用到的控件创建一个字典(内部包含VFL语句中用到的控件)的快捷宏定义NSDictionaryOfVariableBindings(...)

demo示例1:

- (void)test1{    UIView *blueView = [[UIView alloc] init];    blueView.backgroundColor = [UIColor blueColor];    // 不要将AutoresizingMask转为Autolayout的约束    blueView.translatesAutoresizingMaskIntoConstraints = NO;    [self.view addSubview:blueView];        // 添加水平方向的约束    NSString *vfl = @"H:|-20-[abc]-20-|";    NSDictionary *views = @{@"abc" : blueView};    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:vfl options:kNilOptions metrics:nil views:views];    [self.view addConstraints:constraints];        // 添加竖直方向的间距    NSString *vfl2 = @"V:|-20-[abc(40)]";    NSDictionary *views2 = @{@"abc" : blueView};    NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:vfl2 options:kNilOptions metrics:nil views:views2];    [self.view addConstraints:constraints2];}

效果:



demo示例2:

- (void)test2{    UIView *blueView = [[UIView alloc] init];    blueView.backgroundColor = [UIColor blueColor];    // 不要将AutoresizingMask转为Autolayout的约束    blueView.translatesAutoresizingMaskIntoConstraints = NO;    [self.view addSubview:blueView];        // 间距    NSNumber *margin = @20;        // 添加水平方向的约束    NSString *vfl = @"H:|-margin-[blueView]-margin-|";    NSDictionary *views = NSDictionaryOfVariableBindings(blueView);    NSDictionary *mertrics = NSDictionaryOfVariableBindings(margin);    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:vfl options:kNilOptions metrics:mertrics views:views];    [self.view addConstraints:constraints];        // 添加竖直方向的间距    NSNumber *height = @40;    NSString *vfl2 = @"V:|-margin-[blueView(height)]";    NSDictionary *mertrics2 = NSDictionaryOfVariableBindings(margin, height);    NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:vfl2 options:kNilOptions metrics:mertrics2 views:views];    [self.view addConstraints:constraints2];}

效果:



demo示例3:

-(void)test3{    UIView *blueView = [[UIView alloc] init];    blueView.backgroundColor = [UIColor blueColor];    // 不要将AutoresizingMask转为Autolayout的约束    blueView.translatesAutoresizingMaskIntoConstraints = NO;    [self.view addSubview:blueView];        UIView *redView = [[UIView alloc] init];    redView.backgroundColor = [UIColor redColor];    // 不要将AutoresizingMask转为Autolayout的约束    redView.translatesAutoresizingMaskIntoConstraints = NO;    [self.view addSubview:redView];        // 间距    NSNumber *margin = @20;        // 添加水平方向的约束    NSString *vfl = @"H:|-margin-[blueView]-margin-[redView(==blueView)]-margin-|";    NSDictionary *views = NSDictionaryOfVariableBindings(blueView, redView);    NSDictionary *mertrics = NSDictionaryOfVariableBindings(margin);    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:vfl options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:mertrics views:views];    [self.view addConstraints:constraints];        // 添加竖直方向的间距    NSNumber *height = @40;    NSString *vfl2 = @"V:[blueView(height)]-margin-|";    NSDictionary *mertrics2 = NSDictionaryOfVariableBindings(margin, height);    NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:vfl2 options:kNilOptions metrics:mertrics2 views:views];    [self.view addConstraints:constraints2];
效果:



0 0
原创粉丝点击