概述
大多数UI组件的定位可以使用下面的公式来解决:
obj1.propery1 = obj2.property2 * multiplier) + constant value约束是相对于父视图的一个概念。
约束使用NSLayoutConstraint的类方法来创建:
[NSLayoutConstraint constraintWithItem:(nonnull id) //表示上述公式的obj1
attribute:(NSLayoutAttribute) //代表公式中的property1
relatedBy:(NSLayoutRelation) //代表公式中的等号,可以设置为其他值
toItem:(nullable id) //代表公式中的obj2
attribute:(NSLayoutAttribute) //代表公式中的property2
multiplier:(CGFloat) //代表公式中的乘号
constant:(CGFloat)]; //代表公式中的约束值
当创建完约束之后,就可以便捷的把它们添加到适当的视图中,使用以下UIView类方法:
addConstraint和addConstraints
使用可视化格式语言
在表述约束的格式化字符串中,使用H:指定水平排列,使用V:指定垂直排列。
UITextField *textFieldEmail = [[UITextField alloc] init];
UITextField *textFieldConfirmEmail = [[UITextField alloc] init];
NSMutableArray *constaints = [NSMutableArray array];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(textFieldEmail, textFieldConfirmEmail);
//NSDictionary *viewsDictionary = @{@"textFieldEmail" : textFieldEmail};
[constaints addObjectsFromArray:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[textFieldEmail]-|"
options:0
metrics:nil
views:viewsDictionary]];
[constaints addObjectsFromArray:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[textFieldEmail]"
options:0
metrics:nil
views:viewsDictionary]];
[constaints addObjectsFromArray:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[textFieldConfirmEmail]-|"
options:0
metrics:nil
views:viewsDictionary]];
[constaints addObjectsFromArray:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:[textFieldEmail]-[textFieldConfirmEmail]"
options:0
metrics:nil
views:viewsDictionary]];
[self.view addConstraints:constaints];