El motor de diseño en Swift

Muchos desarrolladores de iOS no piensan en cómo funciona el mecanismo para renderizar elementos, establecer y actualizar restricciones en Auto Layout'e. En este artículo, trato de ver en detalle el trabajo del motor de diseño





El pase de diseño

Pase el diseño de : aquí es donde el motor de diseño automático omite la jerarquía de conceptos, pero genera el método ViewWillLayoutSubviews en todas las vistasController y el método layoutSubviews para todas las vistas . El método layoutSubviews actualiza la propiedad Frame de cada subvista





Cuando agregamos, cambiamos o eliminamos restricciones, no se actualizan de inmediato. Sería ineficaz volver a calcular el diseño y actualizar la representación en cada cambio . En cambio, sus cambios programan el mecanismo de diseño propiedad de la ventana para activar actualizaciones de diseño en la próxima oportunidad en el runloop.





Un ciclo de diseño típico consta de varias etapas:





  1. Activador: está cambiando la entrada en el motor de diseño. Esto podría ser agregar o eliminar subvistas, cambiar el tamaño del contenido interno, activar / desactivar restricciones o cambiar la prioridad o restricción constante.





  2. Update Model: layout engine view , views. the layout engine view.



    . Views, , setNeedsLayout() superview, layout pass runloop.





  3. Deferred Layout Pass: the layout pass view hierarchy. constraints. , , layoutSubviews() view, subviews, , views .





, viewController, view layout engine :





  • layout engine updateViewConstraints, view updateConstraints.





  • the layout pass layout engine viewWillLayoutSubviews viewDidLayoutSubviews , layoutSubviews layout





Constraints

view hierarchy , constraint' , layout engine views. updateConstraintsIfNeeded view, constraints. view, constraints, layout engine updateConstraints, . setNeedsUpdateConstraints, . , the layout engine , updateConstraintsIfNeeded.





Views

- view. the layout engine view frames .





, layout, layoutSubviews () subviews layout engine.





setNeedsLayout layoutIfNeeded, layout pass view. , layout pass view :





  • setNeedsLayout: layout. layout view layout pass application run loop.





  • layoutIfNeeded: layoutSubviews , , layout engine subviews





:

  • , constraints . the layout engine , .





  • . constraints. view layout, , the layout engine.





  • setNeedsLayout, layout'a. layoutIfNeeded view frames .












All Articles