Visual format language

所谓的VFL语言其实就是Visual format language 的缩写,是一种使用代码添加约束的方式,类似于Masonry  SDAutolayout的效果,但是操作起来可能要相对简单。一行代码就可以实现。

 

  举一个例子:

 

UIView *ive1=[UIView new];

 

ive1.translatesAutoresizingMaskIntoConstraints=NO;

 

ive1.backgroundColor=[UIColor redColor];

 

[self.view addSubview:ive1];

 

UIView *ive2=[UIView new];

 

ive2.translatesAutoresizingMaskIntoConstraints=NO;

 

ive2.backgroundColor=[UIColor blueColor];

 

[self.view addSubview:ive2];

 

  因为要使用VFL语言,所以就不需要指定固定的frame,但是需要注意的是控件必须先添加到视图上去。

 

  

 

NSArray *ive1Arr= [NSLayoutConstraint

                   

                   constraintsWithVisualFormat:@"H:|-20-[ive1]-20-|" //这个是水平方向的约束,'|'表示父视图

                   options:NSLayoutFormatAlignAllTop|NSLayoutFormatAlignAllBottom //这是个对齐方式

                   metrics:nil//这里返回的是一个字典,意思是将约束中的某些值用字符串来代替,字典中给多对应的字符串赋值,方便修改

                   views:NSDictionaryOfVariableBindings(blueView)];//跟上边相似,返回字典,可用字符串代替,然后给出名字。

 

//上边的式子等同于

NSArray *ive1Arr =[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-toLeft-[testView]-20-|"options:NSLayoutFormatAlignAllTop|NSLayoutFormatAlignAllBottom metrics:@{@"toLeft":@20} views:@{@"testView":ive1}];

 

[self.view addConstraints:ive1Arr];//给添加水平方向的约束数组

 

//给添加垂直方向的数组,高度为五十,距离底边距为10 这种写法会简单一些

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[ive1(50)]-10-|"

                                                                  options:NSLayoutFormatDirectionLeadingToTrailing

                                                                  metrics:nil

                                                                    views:NSDictionaryOfVariableBindings(ive1)]];

 

 

注意一个问题,Visual format language 语言里不能出现乘除法,否则会崩溃。这种情况下只能使用另外一个方法

举例(ive1的宽度是ive2宽度的一半):

NSLayoutConstraint *constraintIve1=[NSLayoutConstraint

                                    constraintWithItem:ive1       //目标item

                                    attribute:NSLayoutAttributeWidth //约束类型

                                    relateBy:NSLayoutRelationEqual  //等同于

                                    toItem:ive2             //对比item

                                    attribute:NSLayoutAttributeWidth

                                    multiplier:0.5           //对比的倍数

                                    constant:0.0            //获取到响应的倍数以后增加固定量

                                    ];

上边内容为手打字母,直接copy可能会有字符错误。请理解代码意思以后自行书写。

转载于:https://www.cnblogs.com/huketianxia/p/5121806.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值