iOS Auto Layout 中的对齐选项

转载地址:http://xuexuefeng.com/alignment-options-in-auto-laytout/

在 OS X Lion 和 iOS 6 中,苹果添加了一个新的方式来布局视图 —— Auto Layout。 这是一个非常强大的系统,它可以处理很多排列视图时的工作和开销。一个定义良好的布局可以使很多头痛的问题完全消失。然而,它有点。。。古怪。。。至少可以这样说。1

继续阅读之前我建议你先阅读 VFL 语法。

本文将会讨论 constraintsWithVisualFormat:options:metrics:views: 方法中的 options 参数你可以设置的各种选项。这些选项将会影响在 VFL 语句中的视图相互之间的对齐方式。

在本文中,我们将会讨论我创建的一个名为 AutoLayoutAlignment 的实例工程,你可以在 Github 上找到它。(译者注:请运行 iPad 版本,iPhone 版本有 Bug。)

选项的作用

在 constraintsWithVisualFormat:options:metrics:views: 中,options 参数是一个位掩码,它允许你定义 VFL 语句中的视图相互之间的对齐方式。例如,VFL 语句 @”V:[first][second][third]” 只告诉你这三个视图应该垂直堆在一起,并没有说明如果这几个视图宽度不同时该怎么做。

你可以通过给每个视图添加水平约束来处理这个问题,但这会让问题变得很繁琐。相反,你可以传递一个选项告诉布局引擎视图之间应该如何放置。

选项

有三套选项方案:一套适用于垂直约束,一套适用于水平约束,一套用来调制约束的水平方向。他们都是 NSLayoutFormatOptions 的一部分。

垂直约束选项
NSLayoutFormatAlignAllLeft - 使所有视图根据它们的左边缘对齐。
NSLayoutFormatAlignAllRight - 使所有视图根据它们的右边缘对齐。
NSLayoutFormatAlignAllLeading - 使所有视图根据当前区域文字开始的边缘对齐(英语:左边,希伯来语:右边)。
NSLayoutFormatAlignAllTrailing - 使所有视图根据当前区域文字结束的边缘对齐(英语:右边,希伯来语:左边)。
NSLayoutFormatAlignAllCenterX - 使所有视图通过设置中心点的 X 值彼此相等来对齐。
特别需要注意的是 NSLayoutFormatAlignAllLeading 和 NSLayoutFormatAlignAllTrailing 。通常来说你应该使用它们代替 NSLayoutFormatAlignAllLeft 和 NSLayoutFormatAlignAllRight 来允许你的 UI 根据阅读的语言来调整为相反方向。

水平约束选项
NSLayoutFormatAlignAllTop – 使所有视图根据它们的顶部边缘对齐。
NSLayoutFormatAlignAllBottom – 使所有视图根据它们的底部边缘对齐。
NSLayoutFormatAlignAllCenterY – 使所有视图通过设置中心点的 Y 值彼此相等来对齐。
NSLayoutFormatAlignAllBaseline – 使所有视图通过它们的基线排列。对于基于文本的视图就是文字的底部不下降(如 g,p,j,等等)。对于非文本视图来说就和底部边缘一样。
当彼此都是文本视图时,基于基线对齐看起来更悦目。但对于混合的视图来说,这可能不是你想要的效果。

方向约束选项
这些选项不能使用逻辑或 | 来多选,你应该三者选一。

NSLayoutFormatDirectionLeadingToTrailing - 在读取格式化字符串时假设字符串的前缘视图(译者注:leading view,词穷,不知如何翻译)应该在显示器的前侧。再次重申,基于使用的语言环境。
NSLayoutFormatDirectionLeftToRight - 在读取格式化字符串时假设字符串的前缘视图应该在显示器的左侧。
NSLayoutFormatDirectionRightToLeft - 在读取格式化字符串时假设字符串的前缘视图应该在显示器的右侧。
默认值是 NSLayoutFormatDirectionLeadingToTrailing,也是通常你需要使用的。

如何应用它们

继续!启动实例工程,你很快将会看到这些对齐选项是如何工作的。

在底部中心的 VFL 语句是屏幕上两个大的视图正在使用的。对齐选项定义在左下方的按钮点击后弹出的视图中。尝试调整对齐选项的设置,你应该注意到文本标签们在它们的父视图上到处移动,并且可以顺利的看到它们是如何工作的。

应用中有一个不属于 NSLayoutFormatOptions 项的附加设置,Apply Option to Superview as Well 选项将会添加一个额外的约束到这些视图上。它通过 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: 方法,使用等效的 NSLayoutAttribute 连接了顶部视图或前侧视图到父视图。

重要的一点需要注意的是如果你禁用了连接父视图的约束,这些视图是如何移动的。尽管父视图在 VFL 语句中是使用 | 来引用的,但这个引用只是为了定位,对齐选项并不会应用在它上面。如果你没有给父视图设置对齐选项,那么布局就被认为是 不明确的(ambiguous),布局引擎就不能完全地显示它。我们将在后面讨论不明确的是什么,以及如何修复它。就现在而言,注意有一个按钮将会把追踪信息输出到控制台,并且将会显示屏幕上哪些视图是不明确的。

结论

希望你现在理解了 options 参数的作用,以及如何使用它来对齐出现在 VFL 语句中的视图。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值