Ios 更改动作上视图的布局定位

Ios 更改动作上视图的布局定位,ios,swift3,nslayoutconstraint,nslayoutanchor,Ios,Swift3,Nslayoutconstraint,Nslayoutanchor,我有一个标签,一个视图和按钮 在ViewDidLoad()方法中,我为视图提供了一些布局约束。点击按钮时,我需要更新这些约束(即视图应向下移动)。我该怎么做呢 这是我的代码。但它不起作用 let keyView = UIView() override func viewDidLoad() { keyView.frame = CGRect(x: 0, y: 0, width: 100, height: 30) keyView.backgroundColor = UIColor.

我有一个标签,一个视图和按钮

ViewDidLoad()
方法中,我为视图提供了一些布局约束。点击按钮时,我需要更新这些约束(即视图应向下移动)。我该怎么做呢

这是我的代码。但它不起作用

let keyView = UIView()

override func viewDidLoad() {

    keyView.frame = CGRect(x: 0, y: 0, width: 100, height: 30)
    keyView.backgroundColor = UIColor.cyan
    keyView.translatesAutoresizingMaskIntoConstraints = false
    containerView.addSubview(keyView)
    keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10).isActive = true
    keyView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20).isActive = true
    keyView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -20).isActive = true
    keyView.bottomAnchor.constraint(equalTo: keyView.topAnchor, constant: keyView.frame.size.height).isActive = true
}
该操作中的代码如下所示

  func buttonAction(sender: UIButton!) {

    keyView.translatesAutoresizingMaskIntoConstraints = false
    keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50))
    keyView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20)
    keyView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -20)
    keyView.bottomAnchor.constraint(equalTo: keyView.topAnchor, constant: keyView.frame.size.height)
    i + =1
}
根据上述代码,单击按钮时,keyView应向下移动。但它并没有下降

请帮帮我。
提前感谢。

获取NSLayoutConstraint类型的全局变量,如下所示

var keyViewTopConstraint:NSLayoutConstraint

现在在viewDidLoad中,同时提供初始约束。给出如下

    keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10)
    keyViewTopConstraint?.isActive = true
   keyViewTopConstraint?.isActive = false
   keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50))
   keyViewTopConstraint?.isActive = true
现在在行动中。删除初始约束并创建另一个约束并使其处于活动状态。为此,请执行以下操作

    keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10)
    keyViewTopConstraint?.isActive = true
   keyViewTopConstraint?.isActive = false
   keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50))
   keyViewTopConstraint?.isActive = true

取NSLayoutConstraint类型的全局变量,如下所示

var keyViewTopConstraint:NSLayoutConstraint

现在在viewDidLoad中,同时提供初始约束。给出如下

    keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10)
    keyViewTopConstraint?.isActive = true
   keyViewTopConstraint?.isActive = false
   keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50))
   keyViewTopConstraint?.isActive = true
现在在行动中。删除初始约束并创建另一个约束并使其处于活动状态。为此,请执行以下操作

    keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10)
    keyViewTopConstraint?.isActive = true
   keyViewTopConstraint?.isActive = false
   keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50))
   keyViewTopConstraint?.isActive = true

为什么不删除以前的布局约束并在Action上添加新的约束呢是的,我甚至尝试过,通过将初始约束设置为.isActive=false。。然后我添加了新的约束。为什么不删除以前的布局约束并在操作上添加新约束呢?是的,我甚至尝试过,通过将初始约束设置为.isActive=false。。然后我添加了新的约束。