自動佈局與可視化格式語言

概述

大多數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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章