如果我想每次都更改,如何以编程方式更新约束

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()
        })
    }

}