如果我想每次都更改,如何以编程方式更新约束
How to update constraints programmatically if I would like to change every time
我有一个 imageView,它应该根据每次变化的值向上或向下。
我保留对 imageView 底部约束的引用,并根据常量值更改此常量。
这些关联代码在我的 ViewController 中,其中有我的 imageView 作为子视图。
private var imageConstraint = 50.0
//viewDidLoad
imageView.snp.makeConstraints {
[=11=].width.height.equalTo(48)
[=11=].centerX.equalToSuperview()
[=11=].bottom.equalTo(-imageConstraint)
}
我尝试将其放入 x 方法中
imageView 留在同一个地方。
DispatchQueue.main.async {
unownedSelf.imageView.layoutIfNeeded()
}
如何修复和更改与更改值相同的约束?
PS: 代码太长放不下,分享相关部分。感谢您的理解。
由于您使用的是 SnapKit,因此您需要使用它的 .updateConstraints
语法。
此示例将在任何触摸时在 50.0 和 -50.0 之间切换 .imageConstraint
,并为图像视图设置动画:
class SnapVC: UIViewController {
let imageView = UIImageView()
private var imageConstraint = 50.0
override func viewDidLoad() {
super.viewDidLoad()
if let img = UIImage(named: "myImage") {
imageView.image = img
}
view.addSubview(imageView)
imageView.snp.makeConstraints {
[=10=].width.height.equalTo(48)
[=10=].centerX.equalToSuperview()
[=10=].bottom.equalTo(-imageConstraint)
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
imageConstraint *= -1
imageView.snp.updateConstraints {
[=10=].bottom.equalTo(-imageConstraint)
}
UIView.animate(withDuration: 0.5, animations: {
self.view.layoutIfNeeded()
})
}
}
我有一个 imageView,它应该根据每次变化的值向上或向下。
我保留对 imageView 底部约束的引用,并根据常量值更改此常量。
这些关联代码在我的 ViewController 中,其中有我的 imageView 作为子视图。
private var imageConstraint = 50.0
//viewDidLoad
imageView.snp.makeConstraints {
[=11=].width.height.equalTo(48)
[=11=].centerX.equalToSuperview()
[=11=].bottom.equalTo(-imageConstraint)
}
我尝试将其放入 x 方法中 imageView 留在同一个地方。
DispatchQueue.main.async {
unownedSelf.imageView.layoutIfNeeded()
}
如何修复和更改与更改值相同的约束?
PS: 代码太长放不下,分享相关部分。感谢您的理解。
由于您使用的是 SnapKit,因此您需要使用它的 .updateConstraints
语法。
此示例将在任何触摸时在 50.0 和 -50.0 之间切换 .imageConstraint
,并为图像视图设置动画:
class SnapVC: UIViewController {
let imageView = UIImageView()
private var imageConstraint = 50.0
override func viewDidLoad() {
super.viewDidLoad()
if let img = UIImage(named: "myImage") {
imageView.image = img
}
view.addSubview(imageView)
imageView.snp.makeConstraints {
[=10=].width.height.equalTo(48)
[=10=].centerX.equalToSuperview()
[=10=].bottom.equalTo(-imageConstraint)
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
imageConstraint *= -1
imageView.snp.updateConstraints {
[=10=].bottom.equalTo(-imageConstraint)
}
UIView.animate(withDuration: 0.5, animations: {
self.view.layoutIfNeeded()
})
}
}