AutoLayoutProxy
AutoLayoutProxy是创建和约束视图的一种便捷方式。尽可能避免重复编写代码。
为什么使用AutoLayoutProxy?
你是否曾经必须写出成行的代码来添加子视图并锚定,就像下面这样:
view.addSubview(subview)
subview.translatesAutoresizingMaskIntoConstraints = false
subview.topAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
...
subview.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
不用担心,AutoLayoutProxy会帮你处理这种情况,如下所示:
view.addSubview(subview) {
subview.top == view.bottom
...
subview.trailing == view.trailing
}
// Or in short
view.addSubview(subview) {
$0.sides == $1.sides
}
看到这里,所需的就是这些。现在,你可能想知道如果需要使用不等于而是小于或大于的关系创建约束怎么办?
subview.leadingAnchor.constraint(lessThanOrEqualTo: view.leadingAnchor, constant: -8).isActive = true
subview.trailingAnchor.constraint(greaterThanOrEqualTo: view.trailingAnchor: constant: 16).isActive = true
AutoLayoutProxy允许你这样做
subview.leading <= view.leading
subview.trailing >= view.trailing
在常量的情况下,你可以在同一个表达式中添加或减去它们,因此不再需要这个
subview.topAnchor.constraint(equalTo: view.bottomAnchor, constant: 16).isActive = true
subview.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: -32).isActive = true
你需要这个:subview.top == view.bottom + 16 subview.leading == view.trailing - 32 如果你想要在未来获取动画或引用约束,就做这个
let subviewTopConstraint = subview.top == view.bottom + 16
subviewTopConstraint.constant = 32
如果你不希望在第一次执行时就激活约束,请使用'!='或甚至'<='和'>=',如下所示
subview.top != view.bottom
subview.leading !<= view.leading
subview.trailing !>= view.trailing
在高度或宽度这样的维度的情况下
subview.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 2, constant: 8).isActive = true
subview.heightAnchor.constraint(equalToConstant: 64).isActive = true
你需要这个
subview.width == view.width * 2 + 8
subview.height == 64
对于添加子视图和translatesAutoresizingMaskIntoConstraints = false,您可以直接编写一个闭包如下
view.addSubview(subview) {
subview.sides <= view.sides
}
您还有其他帮助器,例如包含所有边的sides,以及接受CGSize的size,这还包括水平和垂直约束以及居中。
// Constraint all sides with a padding of 2
subview.sides == view.sides + 2
// Constraint all sides with different padding on each side.
subview.sides == view.sides + UIEdgeInsets(t: 1, l: 2, b: 4, r: 8)
// Align both centers of view and subview
subview.centers == view.centers
// Constraint both centers with offsets 4 and 8.
subview.centers == view.centers + UIOffset(x: 4, y: 8)
// Constraint vertical(top and bottom) or horizontal(leading and trailing)
subview.vertical == view.vertical
subview.horizontal == view.horizontal
// Constraint size either with CGSize or both sides 64
subview.size == CGSize(w: 8, h: 16)
subview.size == 64
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理工具。您可以使用以下命令来安装它:
$ gem install cocoapods
要使用 CocoaPods 将 AutoLayoutProxy 集成到您的 Xcode 项目中,请在其 Podfile
中指定它:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
target '<Your Target Name>' do
pod 'AutoLayoutProxy'
end
然后,运行以下命令:
$ pod install
功能
- 在创建新视图时移除重复的代码。
- 填充超级视图或任何其他视图,带或不带填充。
- 与超级视图或任何其他视图居中对齐。
要求
- iOS 9.0+
- Xcode 8.3+
- Swift 3.0+
许可
AutoLayoutProxy 采用 MIT 许可证发布。
有关详细信息,请参阅 LICENSE。