美文网首页
iOS Visual Format Language 实用示例

iOS Visual Format Language 实用示例

作者: SmallWhiteMouse | 来源:发表于2018-04-12 23:17 被阅读21次

    ①语法示例

    H: [cancleButton(72) ] - 12- [acceptButton(50)]

    cancleButton宽 72, acceptButton宽 50,他们之间间距12

    H :[WideView(>= 60@700)]

    WideView宽度大于等于60,改约束条件优先级为700(优先级最大值为1000,优先级越高的约束越先被满足)

    V:[redBox][yellowBox(==redBox)]

    竖直方向上,先有一个redBox,其下紧跟一个高度等于redBox高度的yellowBox

    H:|-10-[Find]-[FindNext]-[FindField(>=20)]-|

    水平方向上,Find距离父View左边缘默认间隔宽度;之后是FindNext距离Find间隔默认宽度;再然后是宽度不小于20的FindField,它和FindNext以及父view右边缘的间距都是默认宽度。(竖线 | 表示Superview的边缘)

    ②方法注释:

    //这个方法是苹果为了简化单一约束创建的代码量,使用VFL进行自动布局的代码的语法。
    [NSLayoutConstraint constraintsWithVisualFormat:format
                                                options:options
                                                metrics:metrics
                                                  views:views];
    
    • VisualFormat 参数为NSString型,指定Contsraint的属性,就是传类似上面①中的示例的String。

    • options 枚举参数,一般写0或者kNilOptions,具体跟据你所实现的需求去选择你想要的枚举;比如在Format中没有指定HV,只写了具体表达式(@"[superView]-1@1-[buttonA]-1@1-[buttonB]"),则options你就可以选择枚举中的NSLayoutFormatAlignAllLeft表示所有View的左边相同,选择NSLayoutFormatAlignAllCenterX表示 CenterX 都相等。详情见③代码示例.

    • metrics 这里是一个字典,当在format中使用了动态数据比如上现这句:@"H:|-[button(==width)]-|",表示这个button的宽度为width,那么这个参数去哪里找呢?就是在这个字典里面找到key对就的值,如果没有找到这个值,app就会crash。

    • views 字典类型,字典的键是在vfl中用[]括起来的字段,字典的值代表控件对象。比如 @{@"button":redView}。如果你不想写键值对,你可以按照在Format的顺序,NSDictionaryOfVariableBindings(button,button1,button3...)。这样写也等价于@{@"button": button,@"button1": button1,@"button3": button3}

    ③代码示例

     [NSLayoutConstraint constraintsWithVisualFormat:@"[red]-x@1-[blue]-y@1-[yellow]"
                                                options:NSLayoutFormatAlignAllCenterX
                                                metrics:@{@"x":@1,@"y":@1}
                                                  views:@{@"red":redView,@"blue":blueView,@"yellow":yellowView}];
    
    
    • [red]这样写 是表明red只是一个标识,具体这个标识代表什么在views的键值进行说明。所以我们推荐还是id和控件对象名称一致。但是你要知道你可以写不一样。
    • NSDictionaryOfVariableBindings(...)是iOS系统内 定义的一个宏。整个方法系统会通过对象变量名创建Key。即@{@"redView":redView}

    如果您有什么疑问或者书写歧义,非常感激您能留言~

    相关文章

      网友评论

          本文标题:iOS Visual Format Language 实用示例

          本文链接:https://www.haomeiwen.com/subject/bnzfkftx.html