La respuesta es [view layoutIfNeeded]
.
Este es el por qué:
Aún obtiene el ancho y alto actuales de la vista al inspeccionar view.bounds.size.width
y view.bounds.size.height
(o el marco, que es equivalente a menos que esté jugando con view.transform
).
Si lo que desea es el ancho y la altura implícitos en sus restricciones existentes, la respuesta no es inspeccionar las restricciones manualmente, ya que eso requeriría que vuelva a implementar toda la lógica de resolución de restricciones del sistema de diseño automático para interpretarlas. limitaciones. En su lugar, lo que debe hacer es simplemente pedirle a auto layout que actualice ese diseño , de modo que resuelva las restricciones y actualice el valor de view.bounds con la solución correcta, y luego inspeccione view.bounds.
¿Cómo le pides al diseño automático que actualice el diseño? Llame [view setNeedsLayout]
si desea que el diseño automático actualice el diseño en el siguiente giro del ciclo de ejecución.
Sin embargo, si desea que actualice el diseño de inmediato, para que pueda acceder inmediatamente al nuevo valor de límites más adelante dentro de su función actual, o en otro punto antes del turno del ciclo de ejecución, entonces debe llamar [view setNeedsLayout]
y [view layoutIfNeeded]
.
Hiciste una segunda pregunta: "¿cómo puedo cambiar una restricción de altura / ancho si no tengo una referencia a ella directamente?".
Si crea la restricción en IB, la mejor solución es crear un IBOutlet en su controlador de vista o en su vista para que tenga una referencia directa a él. Si creó la restricción en el código, entonces debe mantener una referencia en una propiedad débil interna en el momento en que la creó. Si alguien más creó la restricción, entonces debe encontrarla examinando la propiedad view.constraints en la vista, y posiblemente toda la jerarquía de la vista, e implementando la lógica que encuentra la NSLayoutConstraint crucial. Este es probablemente el camino equivocado, ya que también requiere que usted determine qué restricción particular determinó el tamaño de los límites, cuando no se garantiza que haya una respuesta simple a esa pregunta. El valor de los límites finales podría ser la solución a un sistema muy complicado de restricciones múltiples,