自动布局与可视化格式语言

概述

大多数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];
发布了29 篇原创文章 · 获赞 6 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章