左锚点和前导锚点之间有什么区别?

142

我一直在使用Swift为iOS开发中的约束(constraints),大部分的命名规则和文档都很容易理解,但最近让我感到困惑的是NSLayoutXAxisAnchor类中的两对:

leadingAnchor, leftAnchor

与...一起

trailingAnchor, rightAnchor
当我在我的iOS应用程序中以编程方式设置约束时,我发现我可以完全交替使用leadingAnchor和leftAnchor。如果我使用leadingAnchor,运行应用程序并观察其行为,然后使用leftAnchor,再次运行应用程序并观察其行为,它们的功能完全相同。
我查看了developer.apple.com的文档,结果甚至完全相同(忽略名称上的差异)。例如比较leadingAnchor和leftAnchor:
“使用此锚点创建具有视图前缘的约束。您只能将此锚点与NSLayoutXAxisAnchor锚点的一个子集组合使用。您可以将leadingAnchor与另一个leadingAnchor、trailingAnchor或centerXAnchor组合使用。有关更多信息,请参见NSLayoutAnchor类引用。”
相对于:
“使用此锚点创建具有视图左侧边缘的约束。您只能将此锚点与NSLayoutXAxisAnchor锚点的一个子集组合使用。您可以将leftAnchor与另一个leftAnchor、rightAnchor或centerXAnchor组合使用。有关更多信息,请参见NSLayoutAnchor类引用。”
是否有人知道这些属性之间是否存在任何意义上的区别?
1个回答

327

这个问题在WWDC 2015年的自动布局之谜视频中有简短提及(我想是第一部分,但两部分都值得观看)。

左右约束是绝对的,它们将始终参考屏幕或控件的左/右侧。前导和尾随约束受设备区域设置的影响。在阅读方向从左到右的区域设置(例如英语、法语、西班牙语等)中,前导和左侧(以及尾随和右侧)可以互换使用。在阅读方向从右到左的区域设置(例如希伯来语、阿拉伯语)中,“前导”将成为右侧,“尾随”将成为左侧。

视频中的建议是,除非您具有绝对左/右的特定要求,否则应该几乎总是使用前/后约束而不是左/右约束。

考虑标签和文本字段的典型“表单”形式。如果使用前导/尾随约束,则在英语环境下会将标签放置在左侧,文本字段放置在右侧,并在希伯来语环境下将标签放置在右侧,文本字段放置在左侧。

如果您制作了一个儿童应用程序,您要教左右方向,并且您始终希望“左”按钮位于屏幕的左侧,则左/右约束就是合适的。


12
非常棒的信息,谢谢你的回复。我希望我早点看了那个视频,那样我就可以自己知道了!我会将这个作为被采纳的答案。再次感谢。 - Michael Fourre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接