swift - Como atualizar a restrição de altura constante de um UIView programaticamente?




xcode autolayout (6)

Você pode atualizar sua restrição com uma animação suave, se quiser, veja o trecho do código abaixo:

heightOrWidthConstraint.constant = 100
UIView.animate(withDuration: animateTime, animations:{
self.view.layoutIfNeeded()
})

Eu tenho um UIView e defino as restrições usando o Xcode Interface Builder.

Agora eu preciso atualizar UIView's constante de altura UIView's programaticamente.

Existe uma função que se parece com myUIView.updateConstraints() , mas não sei como usá-la.


Arraste a restrição para o seu VC como um IBOutlet. Então você pode mudar seu valor associado (e outras propriedades; verifique a documentação):

@IBOutlet myConstraint : NSLayoutConstraint!
@IBOutlet myView : UIView!

func updateConstraints() {
    // You should handle UI updates on the main queue, whenever possible
    DispatchQueue.main.async {
        myConstraint.constant = 10
        myView.layoutIfNeeded()
    }
}

Primeiro, conecte a restrição Altura ao nosso viewcontroller para criar o IBOutlet como o código abaixo mostrado

@IBOutlet weak var select_dateHeight: NSLayoutConstraint!

em seguida, colocar o código abaixo em vista fez carregar ou dentro de quaisquer ações

self.select_dateHeight.constant = 0 // we can change the height value

se estiver dentro de um clique de botão

@IBAction func Feedback_button(_ sender: Any) {
 self.select_dateHeight.constant = 0

}

Se o método acima não funcionar, certifique-se de atualizá-lo no bloco Dispatch.main.async {}. Você não precisa chamar o método layoutIfNeeded () então.


Selecione a restrição de altura no construtor Interface e pegue uma saída dele. Então, quando você quer mudar a altura da visão, você pode usar o código abaixo.

yourHeightConstraintOutlet.constant = someValue
yourView.layoutIfNeeded()

O método updateConstraints() é um método de instância do UIView . É útil quando você está definindo as restrições programaticamente. Atualiza as restrições para a exibição. Para mais detalhes, clique here .


Altere HeightConstraint e WidthConstraint sem criar o IBOutlet .

Nota: Atribua a restrição de altura ou largura no arquivo Storyboard ou XIB. depois de buscar esta restrição usando esta extensão.

Você pode usar essa extensão para buscar uma restrição de altura e largura

extension UIView {

var heightConstaint: NSLayoutConstraint? {
    get {
        return constraints.first(where: {
            $0.firstAttribute == .height && $0.relation == .equal
        })
    }
    set { setNeedsLayout() }
}

var widthConstaint: NSLayoutConstraint? {
    get {
        return constraints.first(where: {
            $0.firstAttribute == .width && $0.relation == .equal
        })
    }
    set { setNeedsLayout() }
}

}

Você pode usar

yourView.heightConstaint?.constant = newValue 




ios-autolayout