概述
大多數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];