IOS开发-VFL语言

Visual Format Language,翻译过来时可视化格式语言,是苹果公司用来简化Autolayout代码量的语言。

实例:

(1)H:[(redView(72))]-12-[blueView(50)]

首字母表示水平方向,意思是有一个redview宽度72,距离这个redview右边12个点的距离有一个宽度为50的blueview。

(2)H:[redView(>[email protected])]

redview的宽度大于等于60,优先级最大宽度是700(优先级最大值为1000,所以先满足700)

(3)V:[redView][blueView(==redView)]

redview在垂直方向上的下方紧接着一个blueview,其高度跟redview一致。

(4)H:|-10-[redview]-[blueView]-[yellowView(>=20)]-|

首尾两条竖线表示的是父控件的边缘,水平方向上redView距离父控件左边默认10个点的间隔,redview右边是blueView默认间隔,yellowView高度大于等于20距离在blueView的右边默认间隔。

应用例子:

CGFloat margin = 10;
    //添加水平方向约束
    NSString *vfl = @"H:|-margin-[buleView]-margin-|";
    NSDictionary *views = NSDictionaryOfVariableBindings(buleView);
    NSDictionary *metrics = @{@"margin":@(margin)};
    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:vfl options:kNilOptions metrics:metrics views:views];
    [self.view addConstraints:constraints];
    //添加竖直方向约束
    NSString *vfl2 = @"V:|-64-[buleView(50)]";
    NSDictionary *views2 = NSDictionaryOfVariableBindings(buleView);
    NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:vfl2 options:kNilOptions metrics:nil views:views2];
    [self.view addConstraints:constraints2];

代码如下:


    UIView *buleView = [[UIView alloc]init];
    buleView.translatesAutoresizingMaskIntoConstraints = NO;
    [buleView setBackgroundColor:[UIColor blueColor]];
    [self.view addSubview:buleView];

    UIView *redView = [[UIView alloc]init];
    redView.translatesAutoresizingMaskIntoConstraints = NO;
    [redView setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:redView];

    CGFloat margin = 10;
    //添加水平方向约束
    NSString *vfl = @"H:|-margin-[buleView]-margin-[redView(==buleView)]-margin-|";
    NSDictionary *views = NSDictionaryOfVariableBindings(buleView,redView);
    NSDictionary *metrics = @{@"margin":@(margin)};
    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:vfl options:kNilOptions metrics:metrics views:views];
    [self.view addConstraints:constraints];
    //添加竖直方向约束
    CGFloat height = 40;
    NSString *vfl2 = @"V:[buleView(height)]-margin-|";
    NSDictionary *views2 = NSDictionaryOfVariableBindings(buleView);
    NSDictionary *metrics2 =  @{@"margin":@(margin),@"height":@(height)};
    NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:vfl2 options:kNilOptions metrics:metrics2 views:views2];
    [self.view addConstraints:constraints2];
    //添加还剩余的约束
    NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:buleView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];
    [self.view addConstraint:topConstraint];

    NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:buleView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0];
    [self.view addConstraint:bottomConstraint];

为什么文中还是用了非vfl得语言,因为有些约束是不能通过vfl来表达的。这个苹果官方也有表明。但在文中可以在option那里填入NSLayoutFormatAlignAllTop|NSLayoutFormatAlignAllBottom,就能达到那个效果,就可以不用添加NSLayoutConstraint了。

时间: 2024-10-30 04:49:20

IOS开发-VFL语言的相关文章

李洪强漫谈iOS开发[C语言-043]-判断较早日期

李洪强漫谈iOS开发[C语言-043]-判断较早日期

Android &Swift iOS开发:语言与框架对比

转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text 从Android到Swift iOS开发:语言与框架对比 我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还

李洪强漫谈iOS开发[C语言-041]-计算月份天数

李洪强漫谈iOS开发[C语言-041]-计算月份天数 

李洪强漫谈iOS开发[C语言-044]-翻译数字

 李洪强漫谈iOS开发[C语言-044]-翻译数字

李洪强漫谈iOS开发[C语言-037]-if else 语句

李洪强漫谈iOS开发[C语言-037]-if else 语句

李洪强漫谈iOS开发[C语言-038]-if else if语句

李洪强漫谈iOS开发[C语言-038]-if else if语句

李洪强漫谈iOS开发[C语言-039]-剪刀石头布

 李洪强漫谈iOS开发[C语言-039]-剪刀石头布

iOS开发笔记 - 语言篇之Swift

?2014年的苹果全球开发者大会(WWDC),当Craig Federighi向全世界宣布"We have new programming language"(我们有了新的编程语言)的时候,全场响起了最热烈和持久的掌声,伴随着掌声到来的语言叫Swift.接下来Craig Federighi更是毫不掩饰的告诉大家,Swift将成为主宰iOS和Mac开发的新语言,甚至是整个软件行业中最举足轻重的语言. ??Swift正如它的名字那样迅速.敏捷,但这并不是它的全部.Swift是一个博采众长的

iOS开发核心语言Objective C —— 全部知识点总结

本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础.建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨.另外将无偿分享自己整理出来的大概400G iOS学习视频及学习资料,都是干货哦.能够新浪微博私信?关注极客James,期待与您的共同学习和探讨! ! 由于时间有限,每