在Objective-C中以编程方式添加约束

use*_*005 12 objective-c ios

我需要以UIButton编程方式添加一些约束.我需要它让它水平居中于superview,垂直居中于superview,纵横比为superview,纵横比为self.

有人可以帮我吗?

谢谢.

小智 30

我会为你开球,所以你可以看到一般的想法,否则使用Larme提供的文档.

在superview中添加约束(可能是视图控制器).

NSLayoutConstraint *centreHorizontallyConstraint = [NSLayoutConstraint
                                      constraintWithItem:self.uiButton
                                      attribute:NSLayoutAttributeCenterX
                                      relatedBy:NSLayoutRelationEqual
                                      toItem:self.view
                                      attribute:NSLayoutAttributeCenterX
                                      multiplier:1.0
                                      constant:0];

[self.view addConstraint:centreHorizontallyConstraint];
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到我们说UIButton的中心x属性也是视图控制器视图的中心x属性,没有额外的偏移(乘数设置为1.0和常数0).

确保将其添加到视图控制器的视图而不是按钮,因为此时按钮尚未布局,因此您无法为其添加约束!(如果我错了,请有人纠正我).我在viewDidLoad方法中添加了约束.


Vai*_*ran 23

我发现本教程最好.

http://www.tutorialspoint.com/ios/ios_auto_layouts.htm

我的要求是设定:

  • 领先的空间
  • 顶级空间
  • 固定宽度
  • 固定高度

添加NSLayoutConstraint下面的代码我能够实现它

self.btnCoin.translatesAutoresizingMaskIntoConstraints = NO;
/* Leading space to superview */
NSLayoutConstraint *leftButtonXConstraint = [NSLayoutConstraint
                                             constraintWithItem:self.btnCoin attribute:NSLayoutAttributeLeft
                                             relatedBy:NSLayoutRelationEqual toItem:self attribute:
                                             NSLayoutAttributeLeft multiplier:1.0 constant:30];
/* Top space to superview Y*/
NSLayoutConstraint *leftButtonYConstraint = [NSLayoutConstraint
                                             constraintWithItem:self.btnCoin attribute:NSLayoutAttributeTop
                                             relatedBy:NSLayoutRelationEqual toItem:self attribute:
                                             NSLayoutAttributeTop multiplier:1.0f constant:258];
/* Fixed width */
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.btnCoin
                                                                   attribute:NSLayoutAttributeWidth
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:nil
                                                                   attribute:NSLayoutAttributeNotAnAttribute
                                                                  multiplier:1.0
                                                                    constant:35];
/* Fixed Height */
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.btnCoin
                                                                    attribute:NSLayoutAttributeHeight
                                                                    relatedBy:NSLayoutRelationEqual
                                                                       toItem:nil
                                                                    attribute:NSLayoutAttributeNotAnAttribute
                                                                   multiplier:1.0
                                                                     constant:12];
/* 4. Add the constraints to button's superview*/
[self addConstraints:@[leftButtonXConstraint, leftButtonYConstraint, widthConstraint, heightConstraint]];
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我设置了左键constraints.这是输出:

肖像

景观


Lal*_*hna 16

iOS 9+提供更好的选择

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectZero];
imageView.translatesAutoresizingMaskIntoConstraints = false;
[self.view addSubview:imageView];

[imageView.widthAnchor constraintEqualToConstant:imageSize.width].active = YES;
[imageView.heightAnchor constraintEqualToConstant:imageSize.height].active = YES;
[imageView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = YES;
[imageView.topAnchor constraintEqualToAnchor:self.view.topAnchor constant:25].active = YES;
Run Code Online (Sandbox Code Playgroud)

斯威夫特4

var imageView = UIImageView(frame: CGRect.zero)
imageView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(imageView)

imageView.widthAnchor.constraint(equalToConstant: imageSize.width).isActive = true
imageView.heightAnchor.constraint(equalToConstant: imageSize.height).isActive = true
imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 25).isActive = true

// OR you can use: NSLayoutConstraint.activate([NSLayoutConstraint]) to activate all at once.
Run Code Online (Sandbox Code Playgroud)

注意:在将视图添加到视图层次结构后,始终添加约束.

  • 像这样的一个很好的例子值得十页的文档。开发者参考有时就像<在此插入您的头痛止痛药名称>的详尽化学描述,而您真正需要知道的是如何服用它的简单说明。 (4认同)