TinyConstraints是使Auto Layout更适合人类使用的语法糖。
特点
- 纯Swift 5的甜味。
- 您可以使用Auto Layout完成的任何事情,但更短。
- 约束默认激活。
- 100%与其他Auto Layout代码兼容。
- 可选存储您的约束。
- 创建时设置约束优先级。
- 直接约束到父视图。
- 使用一行代码堆叠视图。
- 无需设置
translatesAutoresizingMaskIntoConstraints
,因为TinyConstraints为您做这件事。
示例
边缘
使用NSLayoutConstraint
将其视图附加到其父视图
NSLayoutConstraint.activate([
view.topAnchor.constraint(equalTo: superview.topAnchor, constant: 0),
view.leadingAnchor.constraint(equalTo: superview.leadingAnchor, constant: 0),
view.bottomAnchor.constraint(equalTo: superview.bottomAnchor, constant: 0),
view.trailingAnchor.constraint(equalTo: superview.trailingAnchor, constant: 0)
])
使用TinyConstraints
view.edgesToSuperview()
或者
view.edgesToSuperview(insets: .top(10) + .left(10))
中心
使用NSLayoutConstraint
将视图的中心约束到父视图上
NSLayoutConstraint.activate([
view.centerXAnchor.constraint(equalTo: superview.centerXAnchor, constant: 0)
view.centerYAnchor.constraint(equalTo: superview.centerYAnchor, constant: 0)
])
使用TinyConstraints
view.center(in: superview)
或者
view.center(in: superview, offset: CGPoint(x: 10, y: 10))
基本用法
类型别名
TinyConstraints
为处理约束提供便捷且小巧的类型别名。
Constraint
=NSLayoutConstraint
Constraints
=[NSLayoutConstraint]
等价与不等价锚点
此约束将视图的 top-anchor
与其父视图的 top-anchor
锚点约束
view.top(to: superview)
将 firstView
的 top-anchor
锚点与 secondView
的 bottom-anchor
锚点约束
firstView.topToBottom(of: secondView)
约束到父视图
通常需要将视图约束到它的父视图中,使用 TinyConstraints 可以轻松实现这一点
view.edgesToSuperview()
或者只约束一个边缘
view.topToSuperview()
或者,您可以只附着一个边缘,如下所示
view.edgesToSuperview(excluding: .bottom)
关系与优先级
对于几乎所有约束,您都可以设置 relation
(关系)和 priority
(优先级)属性。默认关系是 .equal
,默认优先级是 .required
container.width(150, relation: .equalOrLess, priority: .high)
存储约束
在这里,我们创建了一组无效约束并将其存储到我们的属性中
let constraints = view.size(CGSize(width: 100, height: 100), isActive: false)
激活和去激活
除了默认的 NSLayoutConstraint
激活之外,TinyConstraints
还提供了一种激活 一组 约束的方式。
constraints.activate()
你还可以在动画中这样做。
oldConstraints.deActivate()
constraints.activate()
UIViewPropertyAnimator(duration: 1, dampingRatio: 0.4) {
self.layoutIfNeeded()
}.startAnimation()
动画约束常数
在这里,我们为视图添加一个高度约束,将其保存并稍后进行动画处理。
let height = view.height(100)
height.constant = 200
UIViewPropertyAnimator(duration: 1, dampingRatio: 0.4) {
self.layoutIfNeeded()
}.startAnimation()
堆叠
堆叠提供了一个将视图约束在一起在其父视图中的方法。
let views = [logo, title, description]
superview.stack(views, axis: .vertical, spacing: 10)
在示例项目中找到这些示例以及更多内容。
安装
CocoaPods
TinyConstraints 可通过 CocoaPods 获得。要安装它,只需将以下行添加到您的 Podfile:
pod "TinyConstraints"
Carthage
TinyConstraints 可以通过 Carthage 获取。安装它,只需将以下行添加到您的 Cartfile 文件中。
github "roberthein/TinyConstraints"
Swift 包管理器
TinyConstraints 可以通过 Swift Package Manager 获取。要在 Xcode 11.0 或更高版本中安装它,请选择 文件
> Swift Packages
> 添加包依赖...
并添加 TinyConstraints 仓库的 URL。
https://github.com/roberthein/TinyConstraints.git
教程
以下是由 Alex Nagy 制作的一些视频教程。
建议或反馈?
请随意创建一个拉取请求,打开一个问题或在我的 Twitter 上找到我 @roberthein。