使用obj c以编程方式添加centreX和centreY Constraint

时间:2016-04-11 14:12:19

标签: ios objective-c autolayout

您好我有一个命令,以编程方式将约束添加到我的logIn页面。我在视图控制器中有一个视图控制器,我添加了我的uitextfield,uilabel,uibutton ..等等。 我想在X和Y方向上将我的视图控制到主页的中心。我没有得到正确的输出。

[_logInView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.logInView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.logInView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logInView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:309]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logInView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:309]];

https://drive.google.com/file/d/0B9YZfopxzOv5ME95VTNvN010eWM/view?usp=sharing https://drive.google.com/file/d/0B9YZfopxzOv5dWxWV2Zrd2NwSUU/view?usp=sharing

3 个答案:

答案 0 :(得分:0)

您的问题是您的withItemtoItem是错误的。 withItem是您要应用于约束的视图,因此在您的情况下是self.loginView

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logInView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logInView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]];

答案 1 :(得分:0)

您也可以使用一些自定义库来制定约束。我认为标准语法不清楚,太复杂。我更喜欢使用名为KeepLayout的库,这个库有明确的语法来添加约束。 例如,要添加约束,您应该只写一个字符串:

#import <KeepLayout.h>

<....>
[self.logInView keepCentered];
[self.logInView.superview setNeedsLayout]; //because added constraints

答案 2 :(得分:0)

我可以推荐阅读iOS9中引入的Apple新的基于锚点的约束构建工具包。他们让生活更轻松。文档here