通过代码更改堆栈高度,然后在 iOS swift 中重置它

Changing height of stack through code and then resetting it in iOS swift

我有一个高度为250的stackview。我想编程:

  1. 点击按钮时,堆栈应移至屏幕顶部。
  2. 然后几秒钟后它应该回到 250 的高度,这将通过 dispatchque.main.asynafter
  3. 完成

如何让它到达屏幕顶部,然后将其重置为原始高度? The stack I want to go upto the top of the superview

  1. 确保您的 stackViewHeightConstraint 的优先级为 999
  2. 创建另一个约束,例如 stackView.topAnchor equalTo superview.topAnchor(请勿激活它)。
  3. 当您按下按钮进入 展开 状态时, 激活这个top-to-top约束。
  4. 当您想回到正常状态时,停用top-to-top约束。

更新

class ViewController: UIViewController {
    @IBOutlet var stackView: UIStackView!

    // Assumes that stackView is added as a subview in self.view
    private lazy var topToTopConstraint: NSLayoutConstraint = {
        stackView.topAnchor.constraint(equalTo: self.view.topAnchor)
    }()

    @IBAction func expand() {
        NSLayoutConstraint.activate([topToTopConstraint])
        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { [weak self] in
            guard let self = self else { return }
            NSLayoutConstraint.deactivate([self.topToTopConstraint])
        }
    }
}