Diferencia entre LeftAnchor y LeadAnchor?

119

He estado trabajando con restricciones en Swift para iOS, y la mayoría de las convenciones de nomenclatura / documentación hacen que las cosas se expliquen por sí mismas, pero una cosa que me ha confundido recientemente son dos pares de la clase NSLayoutXAxisAnchor:

leadingAnchor, leftAnchor

junto con

trailingAnchor, rightAnchor

Cuando establecí restricciones mediante programación en mi aplicación iOS, descubrí que puedo usarlas de manera totalmente intercambiable. Si uso leadAnchor, ejecuto la aplicación y observo el comportamiento, y luego uso leftAnchor, ejecuto la aplicación y observo el comportamiento, funciona exactamente igual.

Revisé la documentación de developer.apple.com y los resultados son exactamente iguales (ignorando la diferencia de nombres). Por ejemplo, comparando el LeadAnchor y el leftAnchor:

"Utilice este ancla para crear restricciones con el borde delantero de la vista. Solo puede combinar este ancla con un subconjunto de los anclajes NSLayoutXAxisAnchor. Puede combinar un ancla principal con otro ancla principal, un ancla final o un centroXAnchor. Para obtener más información, consulte Clase NSLayoutAnchor Referencia."

comparar con:

"Utilice este ancla para crear restricciones con el borde izquierdo de la vista. Solo puede combinar este ancla con un subconjunto de los anclajes NSLayoutXAxisAnchor. Puede combinar un leftAnchor con otro leftAnchor, un rightAnchor o un centerXAnchor. Para obtener más información, consulte NSLayoutAnchor Class Referencia."

¿Alguien sabe si existe alguna diferencia intencionada entre estas propiedades?

Michael Fourre
fuente

Respuestas:

272

Esto se cubrió (brevemente) en uno de los videos de la WWDC 2015 sobre los misterios del diseño automático (creo que fue la parte 1, pero vale la pena ver ambos).

Las restricciones de izquierda y derecha son absolutas, siempre se referirán a la izquierda / derecha de la pantalla o al control. Las restricciones iniciales y finales se ven afectadas por la configuración regional del dispositivo; En lugares donde la dirección de lectura es de izquierda a derecha (inglés, francés, español, etc.) inicial e izquierda (y final y derecha) se pueden usar indistintamente. En lugares donde la dirección de lectura es de derecha a izquierda (p. Ej., Hebreo, árabe), entonces "inicial" será el lado derecho y "final" será el lado izquierdo.

El consejo en el video fue que casi siempre debes usar el principio / final en lugar de izquierda / derecha a menos que tengas un requisito específico para la izquierda / derecha absoluta.

Considere la "forma" típica de una etiqueta y un campo de texto. Si usa restricciones iniciales / finales, obtendrá la etiqueta a la izquierda y el campo de texto a la derecha para una configuración regional en inglés y la etiqueta a la derecha, el campo de texto a la izquierda para una configuración regional hebrea.

Si creó una aplicación para niños en la que enseñaba de izquierda a derecha y siempre deseaba el botón 'izquierdo' a la izquierda de la pantalla, entonces las restricciones de izquierda / derecha serían apropiadas

Paulw11
fuente
9
Excelente información, gracias por la respuesta. Ojalá hubiera visto el video, ¡entonces lo habría sabido yo mismo! Marcaré esto como la respuesta aceptada. Gracias de nuevo
Michael Fourre