zoukankan      html  css  js  c++  java
  • 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可能会有字符错误。请理解代码意思以后自行书写。

  • 相关阅读:
    最大流EK算法/DINIC算法学习
    hdu-3065-AC自动机
    51nod-1636-dp
    nyoj-1316-二分
    HDU-4510-日期
    HDU-2896-AC自动机
    51nod-1385-贪心-构造
    SpringMVC实现Restful风格的WebService
    SpringMVC使用中遇到的问题总结
    Boostrap(3)
  • 原文地址:https://www.cnblogs.com/huketianxia/p/5121806.html
Copyright © 2011-2022 走看看