Dixi是一个用于创建自动布局约束的Swift操作符集合。
Dixi是用Swift 1.2编写的。该版本的Swift的编译器目前只能在beta版本的Xcode中找到。如果您计划在beta期结束前发布到AppStore,请不要使用Dixi。
iOS/OS X SDK提供了两种从代码中构建约束的方法:显式配置约束参数或使用视觉格式语言的辅助。第一种选项提供了API的全部功能,但最繁琐的是编写。第二种选项涵盖了最常用的功能,并且更简单易写。然而,由于它是基于字符串的,因此规范只会在运行时进行评估,这可能导致潜在的错误。
Dixi具有与视觉格式语言相同的功能,除了可以同时写入多个约束。由于不使用字符串,因此约束语法在构建时评估得早。视图和常量可以直接在约束中使用,从而消除了定义参数字典的需要。
Dixi允许您使用一些自定义操作符通过简洁的类型安全符号创建自动布局约束。语法设计得类似于Apple的视觉格式语言,尽管有一些区别。
以下是如何创建一个定义两个视图之间10点水平距离的约束的示例:
let horizontalDistanceConstraint = view1 |- 10 -| view2
Dixi操作符创建LayoutConstraint对象,这些对象可以转换成NSLayoutConstraint对象,或直接添加到视图中
superview.addConstraint(horizontalDistanceConstraint)
与可视化格式语言不同,您可以使用单个字符串定义多个约束,使用Dixi,您一次只能创建一个约束。下面这样编写是不正确的,编译器会报错
let constraints = view1 |- 10 -| view2 |- 15 -| view3
相反,您可以将上面的代码写成
let constraints = [view1 |- 10 -| view2, view2 |- 15 -| view3]
默认情况下,Dixi操作符在水平轴(宽度、leading和trailing间距)上构建约束。您可以通过在任何LayoutConstraint前面添加垂直轴操作符来构建在垂直轴(高度、top和bottom间距)上的约束
let heightGreaterThanConstraint = ^(view1 >= 50)
您还可以使用水平轴操作符,如果您想使其更明确的话
let explicitAxisConstraint = >(view1 >= 50)
查看演示游乐场以了解Dixi在行动中的更多示例。
运算符 | 名称 | 示例 |
---|---|---|
- | 视图之间的标准间距 | view1 - view2 |
|- | 到视图的后置空间 | view |- 10 |
-| | 到视图的前置空间 | 10 -| view |
|| | 对齐视图 | view1 || view2 |
>= | 宽度/高度大于或等于 | view >= 50 |
<= | 宽度/高度小于或等于 | view <= 50 |
== | 宽度/高度等于 | view1 == view2 |
|-| | 到父视图的 Leading/trailing/top/bottom 距离 | 10 |-| view |
~ | 优先级 | (view >= 50) ~ 20 |
^ | 垂直轴 | ^(view == 10) |
> | 水平轴 | >(view == 10) |
Dixi遵循MIT许可证。