我有一个UIView
,我使用Xcode Interface Builder设置了约束。
现在,我需要以UIView's
编程方式更新该高度常数。
有一个类似的功能myUIView.updateConstraints()
,但我不知道如何使用它。
我有一个UIView
,我使用Xcode Interface Builder设置了约束。
现在,我需要以UIView's
编程方式更新该高度常数。
有一个类似的功能myUIView.updateConstraints()
,但我不知道如何使用它。
Answers:
从“界面”构建器中选择高度约束,然后选择其高度。因此,当您想要更改视图的高度时,可以使用以下代码。
yourHeightConstraintOutlet.constant = someValue
yourView.layoutIfNeeded()
方法updateConstraints()
是的实例方法UIView
。以编程方式设置约束时,这将很有帮助。它更新视图的约束。有关更多详细信息,请单击此处。
如果您的视图具有多个约束,则无需创建多个出口的简单得多的方法是:
在界面构建器中,为您要修改标识符的每个约束提供条件:
然后,您可以在代码中修改多个约束,如下所示:
for constraint in self.view.constraints {
if constraint.identifier == "myConstraint" {
constraint.constant = 50
}
}
myView.layoutIfNeeded()
您可以为多个约束赋予相同的标识符,从而使您可以将约束分组在一起并一次修改所有约束。
改变HeightConstraint
和WidthConstraint
没有创造IBOutlet
。
注意:在情节提要或XIB文件中分配高度或宽度约束。使用此扩展获取此约束后。
您可以使用此扩展来获取高度和宽度约束:
extension UIView {
var heightConstraint: NSLayoutConstraint? {
get {
return constraints.first(where: {
$0.firstAttribute == .height && $0.relation == .equal
})
}
set { setNeedsLayout() }
}
var widthConstraint: NSLayoutConstraint? {
get {
return constraints.first(where: {
$0.firstAttribute == .width && $0.relation == .equal
})
}
set { setNeedsLayout() }
}
}
您可以使用:
yourView.heightConstraint?.constant = newValue
first(where: ...)
可以立即使用,而不是filter
+first
将约束作为IBOutlet拖到VC中。然后,您可以更改其关联值(和其他属性;请查阅文档):
@IBOutlet myConstraint : NSLayoutConstraint!
@IBOutlet myView : UIView!
func updateConstraints() {
// You should handle UI updates on the main queue, whenever possible
DispatchQueue.main.async {
self.myConstraint.constant = 10
self.myView.layoutIfNeeded()
}
}
您可以根据需要使用平滑的动画更新约束,请参见下面的代码块:
heightOrWidthConstraint.constant = 100
UIView.animate(withDuration: animateTime, animations:{
self.view.layoutIfNeeded()
})
首先将Height约束连接到我们的viewcontroller中,以创建IBOutlet,如下面的代码所示
@IBOutlet weak var select_dateHeight: NSLayoutConstraint!
然后将以下代码放在确实已加载或执行任何操作的视图中
self.select_dateHeight.constant = 0 // we can change the height value
如果在按钮内,请单击
@IBAction func Feedback_button(_ sender: Any) {
self.select_dateHeight.constant = 0
}
Create an IBOutlet of NSLayoutConstraint of yourView and update the constant value accordingly the condition specifies.
//Connect them from Interface
@IBOutlet viewHeight: NSLayoutConstraint!
@IBOutlet view: UIView!
private func updateViewHeight(height:Int){
guard let aView = view, aViewHeight = viewHeight else{
return
}
aViewHeight.constant = height
aView.layoutIfNeeded()
}