Configuré mis restricciones en viewDidLoad/ loadView(me dirijo a iOS> = 6). updateViewConstraintses útil para cambiar los valores de las restricciones, por ejemplo, si alguna restricción depende de la orientación de la pantalla (lo sé, es una mala práctica), puede cambiarla constanten este método.
La adición de restricciones viewDidLoadse muestra durante la sesión "Introducción al diseño automático para iOS y OS X" (WWDC 2012), a partir de las 39:22. Creo que es una de esas cosas que se dicen durante las conferencias pero que no llegan a la documentación.
ACTUALIZACIÓN: He notado la mención de configurar restricciones en la Gestión de recursos en los Controladores de vista :
Si prefiere crear vistas mediante programación, en lugar de utilizar un guión gráfico, puede hacerlo anulando el loadView
método del controlador de vista . Su implementación de este método debería hacer lo siguiente:
(...)
3.Si está utilizando el diseño automático, asigne suficientes restricciones a cada una de las vistas que acaba de crear para controlar la posición y el tamaño de sus vistas . De lo contrario, implemente los métodos viewWillLayoutSubviewsy
viewDidLayoutSubviewspara ajustar los marcos de las subvistas en la jerarquía de vistas. Consulte "Cambiar el tamaño de las vistas del controlador de vista".
ACTUALIZACIÓN 2 : Durante la WWDC 2015 de Apple dio una nueva explicación de updateConstraintsy updateViewConstraintsuso recomendado:
Realmente, todo esto es una forma de que las vistas tengan la oportunidad de realizar cambios en las restricciones justo a tiempo para la siguiente pasada de diseño, pero a menudo no es realmente necesario.
Idealmente, toda su configuración inicial de restricciones debería ocurrir dentro de Interface Builder.
O si realmente encuentra que necesita asignar sus restricciones programáticamente, algún lugar como viewDidLoad es mucho mejor.
Las restricciones de actualización son realmente solo para el trabajo que debe repetirse periódicamente.
Además, es bastante sencillo simplemente cambiar las restricciones cuando crea la necesidad de hacerlo; mientras que, si separa esa lógica del otro código que está relacionado con ella y la mueve a un método separado que se ejecuta en un momento posterior, su código se vuelve mucho más difícil de seguir, por lo que será más difícil para usted mantener , será mucho más difícil de entender para otras personas.
Entonces, ¿cuándo necesitaría usar restricciones de actualización?
Bueno, todo se reduce al rendimiento.
Si encuentra que simplemente cambiar sus restricciones en su lugar es demasiado lento, entonces las restricciones de actualización podrían ayudarlo.
Resulta que cambiar una restricción dentro de las restricciones de actualización es en realidad más rápido que cambiar una restricción en otros momentos.
La razón de esto es que el motor puede tratar todos los cambios de restricción que ocurren en esta pasada como un lote.