①语法示例
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中没有指定H
和V
,只写了具体表达式(@"[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}
网友评论