¿Qué es _UILayoutGuide?

Necesito saber acerca de _UILayoutGuide , como lo que es, lo que hace y por qué está presente en la jerarquía de UIView como una subview con casi siempre frame = (0,0,0,0) .

UILayoutGuide normalmente se conoce como -topLayoutGuide y -bottomLayoutGuide, esas no son realmente restricciones, pero son elementos de vista conformes a un protocolo llamado UILayoutSupport .

Puede encontrar más información sobre ese protocolo aquí . El valor es a menudo 0, pero debe prestar mucha atención cuando se le pregunta por su tamaño .

Esta es una class privada de Apple, que se utiliza para topLayoutGuide y bottomLayoutGuide cuando la function de layout automático está habilitada. Si su barra de navigation es opaca, una de estas "vistas" estará en [0,0]. Si sus barras de navigation son traslúcidas, la misma view generalmente estará en [0,64] en retrato (20pt para la barra de estado + 44pt para la barra de navigation). Hay una análoga para la barra de herramientas inferior, si tiene una.

La razón por la que se hace de esta manera es para que pueda definir restricciones de layout, que funcionan con objects UIView .

Una cosa a tener en count, si tiene alguna lógica que funciona en las subvistas, tenga cuidado de no includelos en sus cálculos. Puedes ignorarlos probando:

[subview conformsToProtocol:@protocol(UILayoutSupport)]


En iOS 9, hay una nueva class privada, _UILayoutSpacer , que no es descendiente de UIView , pero se puede usar para configurar restricciones. El sistema parece funcionar en modo dual, donde los controlleres cargados desde xibs y storyboard todavía usan _UILayoutGuide , mientras que los controlleres creados en código se configuran usando _UILayoutSpacer .

UILayoutGuides

UILayoutGuides representan un rectángulo en el motor de layout. No aparecerán en la jerarquía de vista, pero pueden usarse como elementos en una NSLayoutConstraint .

iOS 9

En iOS 9 Apple ofrece una nueva forma mejorada de controlar el espacio negativo llamado UILayoutGuide . Una UILayoutGuide , o guía de layout, es un rectángulo vacío en un layout contra el cual se pueden aplicar restricciones para definir su relación con otras UILayoutGuides o UIViews .

UILayoutGuides no tienen una jerarquía y no forman parte de la jerarquía de vistas. Son propiedad de una UIView, pero no pueden poseer una UIView u otra UILayoutGuide . UILayoutGuides no contiene un CALayer y no son un UIResponder . Esto significa que no hay una sobrecarga de dibujo agregada a la fase de representación añadiendo una UILayoutGuide y no hay impacto en el process de event handling UIEvent al tener una UILayoutGuide .

Fuente:

  • UILayoutGuide – Ayudantes invisibles del layout automático
  • UILayoutGuide.h