Tengo un UIView
y configuro las restricciones usando Xcode Interface Builder.
Ahora necesito actualizar esa UIView's
constante de altura mediante programación.
Hay una función que dice myUIView.updateConstraints()
, pero no sé cómo usarla.
Tengo un UIView
y configuro las restricciones usando Xcode Interface Builder.
Ahora necesito actualizar esa UIView's
constante 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 HeightConstraint
y WidthConstraint
sin 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()
}