我一直在使用Swift for iOS中的约束,大多数命名约定/文档使事情变得非常自我解释,但最近让我感到困惑的一件事是两对NSLayoutXAxisAnchor类:
leadingAnchor, leftAnchor
与
一起trailingAnchor, rightAnchor
当我在iOS应用程序中以编程方式设置约束时,我发现我可以完全互换使用这些约束。如果我使用leadingAnchor,运行应用程序并观察行为,然后使用leftAnchor,运行应用程序并观察行为,它的功能完全相同。
我查看了developer.apple.com的文档,结果甚至完全相同(忽略了名称的不同)。例如,比较leadingAnchor和leftAnchor:
“使用此锚点创建视图前沿的约束。 您只能将此锚点与其子集合并 NSLayoutXAxisAnchor锚点。你可以结合一个LeadingAnchor和 另一个领先的船主,一个尾随的船只,或一个中心的XAnchor。更多 信息,请参阅NSLayoutAnchor类参考。“
比较:
“使用此锚点创建视图左边缘的约束。你 只能将此锚点与NSLayoutXAxisAnchor的子集组合在一起 锚。你可以将leftAnchor和另一个leftAnchor结合起来 rightAnchor,或centerXAnchor。有关更多信息,请参阅 NSLayoutAnchor类参考。“
有谁知道这些属性之间是否存在任何预期的差异?
答案 0 :(得分:196)
这是关于 Autolayout之谜的WWDC 2015视频中的一个(简要介绍)(我认为这是第1部分,但都值得关注)。
左右约束是绝对的,它们将始终指向屏幕的左/右或控件。设备区域设置会影响前导和尾随约束;在阅读方向从左到右(英语,法语,西班牙语等)领先的地方。左(和尾随和右)可以互换使用。在阅读方向从右到左的地方(例如希伯来语,阿拉伯语)然后“领先”#39;将是正确的一面,并且“落后”。将是左侧。
视频中的建议是你应该几乎总是使用领先/尾随而不是左/右,除非你有绝对左/右的特定要求。
考虑典型的形式'标签和文本字段。如果您使用前导/尾随约束,那么您将获得左侧的标签和右侧的文本字段,用于英语区域设置,右侧的标签,左侧的文本字段用于希伯来语区域设置。
如果你制作了一个儿童应用,你从右边教导,你总是想要离开'按钮位于屏幕左侧,然后左/右约束将是合适的