Difference between leftAnchor and leadingAnchor?

IosLayout

Ios Problem Overview


I have been working with constraints in Swift for iOS, and most of the naming conventions/documentation make things quite self explanatory, but one thing that has recently confused me is two pairs of the NSLayoutXAxisAnchor class:

leadingAnchor, leftAnchor

along with

trailingAnchor, rightAnchor

When I have set constraints programmatically in my iOS app, I have found that I can use these totally interchangeably. If I use leadingAnchor, run the app and observe the behavior, and then use leftAnchor, run the app and observe the behavior, it functions exactly the same.

I checked out the documentation from developer.apple.com, and the results are even exactly the same (ignoring the difference in names). For example comparing the leadingAnchor and leftAnchor:

> "Use this anchor to create constraints with the view’s leading edge. > You can only combine this anchor with a subset of the > NSLayoutXAxisAnchor anchors. You can combine a leadingAnchor with > another leadingAnchor, a trailingAnchor, or a centerXAnchor. For more > information, see NSLayoutAnchor Class Reference."

compare to:

> "Use this anchor to create constraints with the view’s left edge. You > can only combine this anchor with a subset of the NSLayoutXAxisAnchor > anchors. You can combine a leftAnchor with another leftAnchor, a > rightAnchor, or a centerXAnchor. For more information, see > NSLayoutAnchor Class Reference."

Does anyone know if there is any intended difference between these properties?

Ios Solutions


Solution 1 - Ios

This was covered (briefly) in one of the WWDC 2015 videos on the Mysteries of Autolayout (I think it was part 1 but both are worth watching).

Left and Right constraints are absolute, they will always refer to the left/right of the screen or the control. Leading and trailing constraints are affected by the device locale; In locales where the reading direction is left to right (English, French, Spanish and so on) leading & left (and trailing & right) can be used interchangeably. In locales where the reading direction is right to left (e.g Hebrew, Arabic) then 'leading' will be the right side and 'trailing' will be the left side.

The advice in the video was you should almost always use leading/trailing rather than left/right unless you have a specific requirement for absolute left/right.

Consider the typical 'form' of a label and a text field. If you use leading/trailing constraints then you will get the label on the left and text field on the right for an English locale and label on the right, text field on the left for a Hebrew locale.

If you made a children's app where you were teaching left from right and you always wanted the 'left' button on the left of the screen then left/right constraints would be appropriate

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMichael FourreView Question on Stackoverflow
Solution 1 - IosPaulw11View Answer on Stackoverflow