如何使用自动布局在屏幕中水平和垂直居中UILabel?

ipa*_*tch 2 objective-c ios autolayout

我一直在使用汽车布局几天,我试图将UILabel垂直和水平地放在屏幕中,但是我没有太多运气让标签居中.

我希望能够实现如下所示的东西,

  ---------------
 |               |
 |               |
 |               |
 |               |
 |    Label      |
 |               |
 |               |
 |               |
 |               |
 | SIGNIN   REG  |
  ---------------
Run Code Online (Sandbox Code Playgroud)

我向UILabel添加了以下约束,

NSLayoutConstraint *myLabelConstraintHeight = [NSLayoutConstraint constraintWithItem:myLabel
                                                                          attribute:NSLayoutAttributeHeight
                                                                          relatedBy:NSLayoutRelationEqual toItem:nil
                                                                          attribute:NSLayoutAttributeNotAnAttribute
                                                                         multiplier:1.0f
                                                                           constant:100];

            [myLabel addConstraint:myLabelConstraintHeight];


            NSLayoutConstraint *myLabelConstraintWidth = [NSLayoutConstraint constraintWithItem:myLabel
                                                                                      attribute:NSLayoutAttributeWidth
                                                                                      relatedBy:NSLayoutRelationEqual toItem:nil
                                                                                      attribute:NSLayoutAttributeNotAnAttribute
                                                                                     multiplier:1.0f
                                                                                       constant:100];
            [myLabel addConstraint:myLabelConstraintWidth];
Run Code Online (Sandbox Code Playgroud)

kei*_*ter 7

NSLayoutConstraint *centerX = [NSLayoutConstraint constraintWithItem:label
                                                           attribute:NSLayoutAttributeCenterX
                                                           relatedBy:NSLayoutRelationEqual
                                                              toItem:label.superview
                                                           attribute:NSLayoutAttributeCenterX
                                                          multiplier:1.0
                                                            constant:0.0];
NSLayoutConstraint *centerY = [NSLayoutConstraint constraintWithItem:label
                                                           attribute:NSLayoutAttributeCenterY
                                                           relatedBy:NSLayoutRelationEqual
                                                              toItem:label.superview
                                                           attribute:NSLayoutAttributeCenterY
                                                          multiplier:1.0
                                                            constant:0.0];

// No longer using [label addConstraints:@[centerX, centerY];
[NSLayoutConstraint activateConstraints:@[centerX, centerY]];
Run Code Online (Sandbox Code Playgroud)

更新:Apple现在希望您使用[NSLayoutConstraint activateConstraints:][NSLayoutConstraint deactivateConstraints:]不是使用[UIView addConstraint:][UIView removeConstraint:].

更新8/24/17:

可以使用布局锚点来完成更简单的版本:

[label.centerXAnchor constraintEqualToAnchor:label.superview.centerXAnchor].active = YES;
[label.centerYAnchor constraintEqualToAnchor:label.superview.centerYAnchor].active = YES;
Run Code Online (Sandbox Code Playgroud)