Tengo un UIViewy configuro las restricciones usando Xcode Interface Builder.
Ahora necesito actualizar esa UIView'sconstante de altura mediante programación.
Hay una función que dice myUIView.updateConstraints(), pero no sé cómo usarla.
Tengo un UIViewy configuro las restricciones usando Xcode Interface Builder.
Ahora necesito actualizar esa UIView'sconstante de altura mediante programación.
Hay una función que dice myUIView.updateConstraints(), pero no sé cómo usarla.
Respuestas:
Seleccione la restricción de altura en el constructor de Interfaces y tome una salida. Entonces, cuando desee cambiar la altura de la vista, puede usar el siguiente código.
yourHeightConstraintOutlet.constant = someValue
yourView.layoutIfNeeded()
El método updateConstraints()es un método de instancia de UIView. Es útil cuando establece las restricciones mediante programación. Actualiza las restricciones de la vista. Para más detalles haga clic aquí .
Si tiene una vista con múltiples restricciones, una forma mucho más fácil sin tener que crear múltiples salidas sería:
En el generador de interfaces, asigne un identificador a cada restricción que desee modificar:
Luego, en el código, puede modificar múltiples restricciones así:
for constraint in self.view.constraints {
if constraint.identifier == "myConstraint" {
constraint.constant = 50
}
}
myView.layoutIfNeeded()
Puede asignar el mismo identificador a varias restricciones, lo que le permite agrupar restricciones y modificarlas todas a la vez.
Cambiar HeightConstrainty WidthConstraintsin crear IBOutlet.
Nota: Asigne una restricción de altura o ancho en el archivo Storyboard o XIB. después de obtener esta restricción usando esta extensión.
Puede usar esta extensión para obtener una restricción de altura y ancho:
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() }
}
}
Puedes usar:
yourView.heightConstraint?.constant = newValue
first(where: ...)que podría usar inmediatamente en lugar de filter+first
Arrastre la restricción a su VC como un IBOutlet. Luego puede cambiar su valor asociado (y otras propiedades; consulte la documentación):
@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()
}
}
Puede actualizar su restricción con una animación suave si lo desea, vea el fragmento de código a continuación:
heightOrWidthConstraint.constant = 100
UIView.animate(withDuration: animateTime, animations:{
self.view.layoutIfNeeded()
})
Si el método anterior no funciona, asegúrese de actualizarlo en el bloque Dispatch.main.async {}. No es necesario llamar al método layoutIfNeeded () entonces.
Primero conecte la restricción de altura a nuestro controlador de vista para crear IBOutlet como se muestra en el siguiente código
@IBOutlet weak var select_dateHeight: NSLayoutConstraint!
luego ponga el siguiente código a la vista si se cargó o dentro de cualquier acción
self.select_dateHeight.constant = 0 // we can change the height value
si está dentro de un botón, haga clic
@IBAction func Feedback_button(_ sender: Any) {
self.select_dateHeight.constant = 0
}
Para actualizar una restricción de diseño, solo necesita actualizar la propiedad constante y llamar a layoutIfNeeded después.
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()
}