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?
ベストアンサー1
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 いつも画面の左側に「左」ボタンを配置したい場合は、左/右制約が適切です。