代码之家  ›  专栏  ›  技术社区  ›  fs_tigre

自动布局未以编程方式更新视图-Swift

  •  -1
  • fs_tigre  · 技术社区  · 5 年前

    我有下面的代码,我在其中创建和布局所有的代码。我要做的是修改 myTopContainer

    知道为什么吗?

    func setupAutoLayout(){
        NSLayoutConstraint.activate([
            // My Container
            myTopContainer.bottomAnchor.constraint(equalTo: myButton.topAnchor, constant: -5),
            myTopContainer.heightAnchor.constraint(equalToConstant: 50),
            myTopContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15),
            myTopContainer.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -15),
    
            // My Button
            myButton.widthAnchor.constraint(equalToConstant: 80),
            myButton.heightAnchor.constraint(equalToConstant: 40),
            myButton.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -15),
            myButton.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -400)
        ])
    }
    
    
    @IBAction func relayoutViews(_ sender: Any) {
    
        UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseIn, animations: {
    
            self.myTopContainer.heightAnchor.constraint(equalToConstant: 50).isActive = false
            self.myTopContainer.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 15).isActive = false
    
            // this is working, it changes the height
            self.myTopContainer.heightAnchor.constraint(equalToConstant: 10).isActive = true
            // this is not doing anything
            self.myTopContainer.leadingAnchor.constraint(equalTo: self.myButton.trailingAnchor).isActive = true
    
            self.view.layoutIfNeeded()
    
        })
    }
    

    enter image description here

    2 回复  |  直到 5 年前
        1
  •  1
  •   Enricoza    5 年前

    像这样的台词

    self.myTopContainer.heightAnchor.constraint(equalToConstant: 50).isActive = false
    

    每次都创建一个新约束。它不会修改先前创建的约束。

    NSLayoutConstraint.activate() 在他们身上。 稍后可以将isActive设置为false。

    例如:

    var someConstraint: NSLayoutConstraint?
    func setupAutoLayout(){
        let aConstraint = myTopContainer.bottomAnchor.constraint(equalTo: myButton.topAnchor, constant: -5)
        someConstraint = aConstraint
        NSLayoutConstraint.activate([
            // My Container
            aConstraint
        ])
    }
    
    func editConstraint() {
        self.someConstraint?.isActive = false
    }