创建Constraint
你可以使用NSLayoutConstraint来表示constrains。
如果要创建constraints,一般要使用 constraintsWithVisualFormat:options:metrics:views:。
第一个参数是一个visual format string,这种visual format language已经尽可能的是自我解释的。一个view使用一个方括号来代表,view之间的连接用横杠来代表。visual format language的语法参见Visual Format Language
比如说,

上图可以表示为:
[button1]-12-[button2]
如果是标准的Aqua距离的话,可以不用标注数字
[button1]-[button2]
view的名字来自于参数views字典。key就是这里用到名字,而value是对应的view对象。
可以使用NSDictionaryOfVariableBindings来创建该字典,该函数使用view对象的名字来作为key值
NSDictionary *viewsDictionary =
NSDictionaryOfVariableBindings(self.button1, self.button2);
NSArray *constraints =
[NSLayoutConstraint constraintsWithVisualFormat:@"[button1]-[button2]"
options:0 metrics:nil views:viewsDictionary];
并不是每一种constraint都可以通过visual format language来表示的。比如有一种常用的constraint不能用该语言来表达,比如固定宽高比,这时候需要用这样的函数:
constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constraint:
比如上面contraint还可以这样创建
[NSLayoutConstraint constraintWithItem:self.button1
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.button2
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:-12.0];
Installing Constraints
我们必须把constraint加到view中,这个view应该是所有涉及到的view的祖先view,通常是最近的那个祖先view。
关于这个我们可以使用NSView的addConstraint:
相关的函数还有:
removeConstraint:constraintsfittingSize
参考资料
- 最重要的一个开源库可以帮助我们不用写那么多无聊的代码
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(superview).with.insets(padding);
}];