测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2015年11月 |
SPM支持 SPM | ✗ |
Maintained by Alex Pretzlav.
Strutter
是一个 Swift µ Framework,用于使用一些自定义中缀运算符定义 AutoLayout 约束。它使用 iOS 9 / OS X 10.11 的 NSLayoutAnchor
系统来定义这些约束。
为了向后兼容,有一个名为 OALayoutAnchor
的 subspec 和一个名为 Strutter iOS OALayout
的备用框架,它使用 OALayoutAnchor 而不是 NSLayoutAnchor
。这个版本适用于 iOS 8。
Strutter
使用自定义运算符 |=|
、|>=|
和 |<=|
来定义两个 NSLayoutAnchors
之间的相等、大于等于和小于等于约束。苹果的文档 解释了 NSLayoutAnchor 的工作原理。
Strutter
会自动激活约束并禁用左侧视图的 translatesAutoresizingMaskIntoConstraints
属性。它不会自动禁用两个视图,因此视图控制器和导航栏的子视图定位按预期工作。
由于 Strutter
只是在 NSLayoutAnchor
方法之上的语法糖,因此它保留了由 NSLayoutAnchor 强制执行的类型安全性,防止创建无效的约束,例如维度和位置度量之间的约束。
Strutter 支持 Cocoapods 和 Carthage。
这个详细的数据块将 iOS 8 中一个视图的右侧边缘与另一个视图的左侧边缘对齐
NSLayoutConstraint(item: view1,
attribute: .Trailing,
relatedBy: .Equal,
toItem: view2,
attribute: .Leading,
multiplier: 1,
constant: 0).active = true
使用布局锚点可以将它缩短为以下内容
view1.trailingAnchor.constraintEqualToAnchor(view2.leadingAnchor).active = true
Strutter
进一步将其缩短为
view1.trailingAnchor |=| view2.leadingAnchor
Strutter
表达式的值是创建的约束,因此创建后如果需要可以将其停用
let constraint = view1.trailingAnchor |=| view2.leadingAnchor
constraint.active = false
Strutter
允许通过元组指定常量和/或多乘数
subview.topAnchor |=| (superview.topAnchor, 10)
等同于
subview.topAnchor.constraintEqualToAnchor(
superview.topAnchor, constant: 10).active = true
// or
NSLayoutConstraint(item: subview,
attribute: .Top,
relatedBy: .Equal,
toItem: superview,
attribute: .Top,
multiplier: 1,
constant: 10).active = true
和
subv.heightAnchor |=| (v.heightAnchor, multiplier: 2, constant: -20)
等同于
subv.heightAnchor.constraintEqualToAnchor(
v.heightAnchor, multiplier: 2, constant: -20)
定义小于和大于属性
subv.heightAnchor |<=| v.heightAnchor
等同于
subv.heightAnchor.constraintLessThanOrEqualToAnchor(v.heightAnchor)
最后,Strutter
允许对维度轴进行常数值约束
subv.heightAnchor |=| 200
等同于
subv.heightAnchor.constraintEqualToConstant(200)
请查看这个游乐场,它演示了 basic Strutter
语法。要使用它,打开 Strutter.xcworkspace 项目的 Strutter iOS
架构,以 iPhone 5s 模拟器或更新的为目标构建,并在项目导航器中选择 Example.playground
。
Strutter
使用 MIT 许可证发布。我们欢迎贡献。