SwiftLayoutKit 0.1.2

SwiftLayoutKit 0.1.2

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2015年4月
SPM支持 SPM

Yanko Dimitrov 维护。



一种优雅简单的构建自动布局约束的方法。

您可以使用 SwiftLayoutKit 通过表达视图布局属性的相互关系或使用视觉格式语言来生成自动布局约束。

请注意,SwiftLayoutKit 不会将视图的 setTranslatesAutoresizingMaskIntoConstraints 设置为 false,也不会为您自动安装约束。

SwiftLayoutKit UML class diagram

图 1:SwiftLayoutKit UML 类图

安装

手动

SwiftLayoutKit 文件夹的内容复制到您的项目中

  • LayoutAttribute.swift
  • AutoLayoutAttribute.swift
  • Layout.swift
  • LayoutOperators.swift
  • ViewExtensions.swift

使用方法

SwiftLayoutKit 支持所有可用的布局属性,包括随 iOS 8 引入的新属性。

要开始使用,在您的 UIView 实例上调用 attribute 方法,然后传入您希望使用的 NSLayoutAttribute 类型,例如

...

// let's assume that boxView is a subview of view

boxView.attribute(.Width) == 200
boxView.attribute(.Height) == 200
boxView.attribute(.CenterX) == view.attribute(.CenterX)
boxView.attribute(.CenterY) == view.attribute(.CenterY)

...

上面的代码将生成四个约束,但不会将它们添加到父视图的约束中。我们可以使用自定义的 添加约束 操作符 +| 来将生成的约束添加到父视图

...

view +| boxView.attribute(.Width) == 200
view +| boxView.attribute(.Height) == 200
view +| boxView.attribute(.CenterX) == view.attribute(.CenterX)
view +| boxView.attribute(.CenterY) == view.attribute(.CenterY)

...

您不必强制使用 +| 操作符,也可以在父视图上调用 addConstraint 方法

...

view.addConstraint( boxView.attribute(.Width) == 200 )

...

布局函数

使用视觉格式语言的约束

有时使用视觉格式语言生成约束更容易更快。SwiftLayoutKit 附带了一个用于 NSLayoutConstraint.constraintsWithVisualFormat 类方法的辅助包装函数。此函数期望一个视觉格式字符串,并包含一个按视图组织的字典,并将 选项度量 作为可选参数

...

let views = ["title": titleLabel]

let constraints = constraintsWith(format: "|-[title]-|", forViews: views)

...

使用对齐属性生成约束

以下函数允许您通过给定的 NSLayoutAttribute 对齐多个视图到一个视图

...

let constraints = constraintsWith(align: .CenterY, toView: parentView, forViews: viewA, viewB)

...

上述代码将设置 viewAviewBCenterY 属性与 parentViewCenterY 属性相等。

运算符

以下是所有 SwiftLayoutKit 运算符的列表

运算符 描述
+| 向一个视图添加约束
~ 设置左布局属性上的约束优先级
== 生成两个布局属性之间或属性与数字之间具有等量关系的约束
>= 生成两个布局属性之间或属性与数字之间具有大于或等于关系的约束
<= 生成两个布局属性之间或属性与数字之间具有小于或等于关系的约束
+ 将约束常量增加一个特定的数字
- 将约束常量减少一个特定的数字
* 将约束乘数设置为一个特定的数字
/ 将约束乘数除以一个特定的数字(默认乘数设置为 1)
...

view +| viewA.attribute(.Width) == 200
view +| viewA.attribute(.Height) ~ 600 == 50

view +| viewA.attribute(.Top) ~ 500 == viewB.attribute(.Top) + 20
view +| viewA.attribute(.Leading) == viewB.attribute(.Trailing) / 2 + 40

view +| viewC.attribute(.Top) == viewB.attribute(.Top) * 2 - 10
view +| viewC.attribute(.CenterX) == viewB.attribute(.CenterX)

view +| viewC.attribute(.Width) >= viewB.attribute(.Width)
view +| viewC.attribute(.Height) <= 200

...

测试?

是的,你可以在 SwiftLayoutKitTests 文件夹中找到它们。

灵感来源

该项目受到了 Robb BöhnkeCartography 上的工作的启发。

许可

SwiftLayoutKit 在 MIT 许可下发布。有关更多信息,请参阅 LICENSE.txt 文件。