translatesautoresizingmaskintoconstraints - swift constraints programmatically
¿Cómo actualizar la restricción de altura constante de una UIView mediante programación? (9)
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()
})
Tengo una
UIView
y configuré las restricciones usando Xcode Interface Builder.
Ahora necesito actualizar
UIView''s
altura de esa
UIView''s
constante mediante programación.
Hay una función que va como
myUIView.updateConstraints()
, pero no sé cómo usarla.
Arrastre la restricción a su VC como 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 {
myConstraint.constant = 10
myView.layoutIfNeeded()
}
}
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()
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 poner a la vista el código a continuación 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
}
Seleccione la restricción de altura del generador de Interfaz y tome una salida. Por lo tanto, 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 configura las restricciones mediante programación.
Actualiza las restricciones para la vista.
Para más detalles haga clic
here
.
Si el método anterior no funciona, asegúrese de actualizarlo en el bloque Dispatch.main.async {}. No necesita llamar al método layoutIfNeeded () entonces.
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 creador de interfaces, asigne a cada restricción que desee modificar un identificador:
Luego, en el código, puede modificar múltiples restricciones de la siguiente manera:
for constraint in self.view.constraints {
if constraint.identifier == "myConstraint" {
constraint.constant = 50
}
}
myView.layoutIfNeeded()
Puede asignar a varias restricciones el mismo identificador, lo que le permite agrupar restricciones y modificarlas todas a la vez.
Cambie
HeightConstraint
y
WidthConstraint
sin crear
IBOutlet
.
Nota: Asigne restricciones de altura o ancho en Storyboard o archivo XIB. después de buscar esta restricción utilizando esta extensión.
Puede usar esta extensión para obtener una restricción de altura y ancho
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() }
}
}
Puedes usar
yourView.heightConstaint?.constant = newValue
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()
}