在Objective-C中以编程方式添加约束
我需要以编程方式向UIButton
添加一些约束。 我需要它让它水平居中于superview,垂直居中于superview,纵横比为superview,纵横比为self。
有人可以帮我吗?
谢谢。
我会为你开球,所以你可以看到一般的想法,否则使用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];
因此,您可以看到我们说UIButton的中心x属性也是视图控制器视图的中心x属性,没有额外的偏移(乘数设置为1.0和常数0)。
确保将其添加到视图控制器的视图而不是按钮,因为此时按钮尚未布局,因此您无法为其添加约束! (如果我错了,请有人纠正我)。 我在viewDidLoad方法中添加了约束。
我发现本教程最好。
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]];
在上面的代码中,我设置了左键constraints
。 这是输出:
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;
斯威夫特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
注意:在将视图添加到视图层次结构后,始终添加约束。
- TableView registerClass:forCellReuseIdentifier不起作用
- 如何在iOS objective-c代码中使用名称空间?
- 如何下载iPad Mini模拟器
- 在iOS 4.0中,为什么UIScrollView zoomToRect:animated:在animation时不触发scrollViewDidScroll或scrollViewDidZoom委托?
- 使用AutoLayout(Storyboard)自动调整UIView的高度到它的子视图
- 如何从视图控制器传递数据?
- 使用MeasurementFormatter选择单位
- Kontakt iBeacon返回零
- iOS键盘没有上一页,下一步,完成button的HTMLinput字段?