假设现在要在某个视图(view)中放置三个子视图(subviews)。其中两个子视图放置在上方,第三个视图紧挨着它们放到下方。不过上方的两个视图高度不定,并且你不知道哪个更高一些。现在要求我们使用自动布局(Auto Layout)来控制下方视图和上方视图之间间距至少 10 单位像素。
我们该如何实现呢?实现技巧是使用不等式约束条件 (inequality) 以及设置约束优先级 (priority)。相关约束如下:
// 注意约束使用不等式 >=,以及设置优先级
leftViewConstraints += NSLayoutConstraint.constraintsWithVisualFormat("V:[red(50)]-(>=10)-[green]", options: [], metrics: nil, views: leftViews)
leftViewConstraints += NSLayoutConstraint.constraintsWithVisualFormat("V:[blue(100)]-(>=10)-[green]", options: [], metrics: nil, views: leftViews)
leftViewConstraints += NSLayoutConstraint.constraintsWithVisualFormat("V:[blue(100)]-(<=10@999)-[green]", options: [], metrics: nil, views: leftViews)
上方两个视图与底部视图的最小间距不能小于 10(译者注:这里约束优先级默认是 1000)。此外蓝色视图与底部视图的最大间距不得大于 10 ,其优先级为 999。
就是这样!你可以看到如下方截图所示的结果。左侧图片中,蓝色视图的高度为 100 单位像素,红色视图高度为 50 单位像素。 右侧图片则刚刚相反。
这里向你提供完整代码的 playground 下载。
译者注:你可以在下载的 playground 下方键入 view 属性,然后在右侧栏点击 Quick Look,也就是那个眼睛,就能看到如上所示的截图了!
本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。