我已经使用情节提要创建了“第一个按钮”并为其设置了约束,现在我要以编程方式创建另一个按钮并将其设置在第一个按钮上方,例如:
,我使用以下代码尝试实现这一目标:
NSLayoutConstraint *xConstraint = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0];
NSLayoutConstraint *Yxonstraints = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.invoiceTextField attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];
NSLayoutConstraint *width = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:200];
NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:200];
[self.view addConstraints:@[xConstraint,Yxonstraints,width,height]];
第二个按钮结束于中间和左侧,并且也小于其实际大小,这是我在做什么错?
答案 0 :(得分:0)
NSLayoutConstraint *Yxonstraints = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.invoiceTextField attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];
您不想要那样。您希望secondButton.top是firstButton.bottom的空间:
NSLayoutConstraint *Yxonstraints = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.invoiceTextField attribute:NSLayoutAttributeBottom multiplier:1.0 constant:20];
答案 1 :(得分:0)
您需要
self.secondBu.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
self.secondBu.bottomAnchor.constraint(equalTo: self.firstBu.topAnchor, constant:-15)
self.secondBu.leadingAnchor.constraint(equalTo: self.firstBu.leadingAnchor),
self.secondBu.trailingAnchor.constraint(equalTo: self.firstBu.trailingAnchor),
self.secondBu.heightAnchor.constraint(equalTo: self.firstBu.heightAnchor)
])
但最简单的方法是将firstBu插入情节提要中的UIStackView
内,然后使用1行
self.stackView.insertArrangedSubview(secondBu,at:0)
您也可以在IB中将stackView interval属性设置为15,也应避免按照Apple的建议使用addConstraints
并使用NSLayoutConstraint.activate
答案 2 :(得分:-2)
您可以通过以下步骤实现相同目的:
将以下行添加到要添加 按钮。
self.buttonHeightConstant.constant = 50
self.view.layoutIfNeeded()
它将为高度约束设置新值以使其可见,第二行更新视图的其他约束。