eu tenho um UIView
e defino as restrições usando o Xcode Interface Builder.
Agora eu preciso atualizar isso UIView's
constante de altura programaticamente.
Tem uma função que funciona assim myUIView.updateConstraints()
, mas não sei como usar.
eu tenho um UIView
e defino as restrições usando o Xcode Interface Builder.
Agora eu preciso atualizar isso UIView's
constante de altura programaticamente.
Tem uma função que funciona assim myUIView.updateConstraints()
, mas não sei como usar.
Respostas:
Selecione a restrição de altura do construtor de interface e obtenha uma saída dela. Então, quando você quiser alterar a altura da vista, você pode usar o código abaixo.
yourHeightConstraintOutlet.constant = someValue
yourView.layoutIfNeeded()
Método updateConstraints()
é um método de instância de UIView
. É útil quando você está definindo as restrições de maneira programática. Ele atualiza as restrições para a vista. Para mais detalhes clique aqui .
Se você tiver uma visualização com várias restrições, uma maneira muito mais fácil sem ter que criar vários pontos de venda seria:
No construtor de interface, dê a cada restrição que deseja modificar um identificador:
Então, no código, você pode modificar várias restrições como:
for constraint in self.view.constraints {
if constraint.identifier == "myConstraint" {
constraint.constant = 50
}
}
myView.layoutIfNeeded()
Você pode atribuir a várias restrições o mesmo identificador, permitindo agrupar as restrições e modificar tudo de uma vez.
Mude HeightConstraint
e WidthConstraint
sem criar IBOutlet
.
Nota: Atribua restrição de altura ou largura no Storyboard ou arquivo XIB. depois de buscar esta restrição usando esta extensão.
Você pode usar esta extensão para obter uma restrição de altura e largura:
extension UIView {
var heightConstraint: NSLayoutConstraint? {
get {
return constraints.first(where: {
$0.firstAttribute == .height && $0.relation == .equal
})
}
set { setNeedsLayout() }
}
var widthConstraint: NSLayoutConstraint? {
get {
return constraints.first(where: {
$0.firstAttribute == .width && $0.relation == .equal
})
}
set { setNeedsLayout() }
}
}
Você pode usar:
yourView.heightConstraint?.constant = newValue
first(where: ...)
você pode usar imediatamente em vez de filter
+first
Arraste a restrição para o seu VC como um IBOutlet. Em seguida, você pode alterar 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 {
self.myConstraint.constant = 10
self.myView.layoutIfNeeded()
}
}
Você pode atualizar sua restrição com uma animação suave, se quiser, veja o trecho de código abaixo:
heightOrWidthConstraint.constant = 100
UIView.animate(withDuration: animateTime, animations:{
self.view.layoutIfNeeded()
})
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.
Primeiro conecte a restrição de altura em nosso viewcontroller para criar IBOutlet como o código abaixo mostrado
@IBOutlet weak var select_dateHeight: NSLayoutConstraint!
em seguida, coloque o código abaixo em exibição carregou ou dentro de qualquer ação
self.select_dateHeight.constant = 0 // we can change the height value
se estiver dentro de um botão, clique
@IBAction func Feedback_button(_ sender: Any) {
self.select_dateHeight.constant = 0
}
Para atualizar uma restrição de layout, você só precisa atualizar a propriedade constante e chamar layoutIfNeeded depois.
myConstraint.constant = newValue
myView.layoutIfNeeded()
Create an IBOutlet of NSLayoutConstraint of yourView and update the constant value accordingly the condition specifies.
//Connect them from Interface
@IBOutlet viewHeight: NSLayoutConstraint!
@IBOutlet view: UIView!
private func updateViewHeight(height:Int){
guard let aView = view, aViewHeight = viewHeight else{
return
}
aViewHeight.constant = height
aView.layoutIfNeeded()
}