SnapLayoutKit 是一个轻量级的 Swift 框架(小于 300 行),允许您以编程方式创建 Auto Layout 约束。该框架通过包装函数扩展了 UIView
,不与项目中现有的约束冲突。方法是可连接的,因此在设置 UI 时可以轻松进行。
特性
- 轻量级且易于使用
- 链式方法
- 自动处理安全区域(需要 iOS 11 或更高版本)
- 适应本地阅读方向
为什么使用它?
假设我们有一个 UIView,我们想要将其居中并设置大小。在 Apple 的方法中,为了做到这一点,我们将执行以下操作:Apple
blueView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
blueView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
blueView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
blueView.widthAnchor.constraint(equalToConstant: 100),
blueView.heightAnchor.constraint(equalToConstant: 100)
])
SnapLayoutKit
blueView.exec()
.center(to: view)
.size(.init(width: 100, height: 100))
exec
函数处理 translatesAutoresizingMaskIntoConstraints
,因此不需要手动关闭。
要求
- Xcode
- 语言支持:Swift 5
- 完全兼容 Xcode 7.0 及更高版本
- iOS
- 完全兼容 iOS 11 及更高版本 - 没有安全区域的 iOS 9 兼容
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令进行安装: gem install cocoapods
将 EasyLayout 集成到您的 Xcode 项目中,请在您的 Podfile
中添加以下内容: pod 'SnapLayoutKit'
用法
要使用 SnapLayoutKit,必须始终在调用任何对接方法之前调用 exec()
概述
- 使用
NSLayoutAnchor
,API 可以无缝集成到每个项目中。 - 自动关闭
translatesAutoresizingMaskIntoConstraints
并激活约束。 - 可以通过简单的方法更新约束或直接删除一个约束。
- SnapLayoutKit 不返回自定义对象,它只返回熟悉的 UIView 对象。
- 链式方法使代码可读性高,快速编写。
方法
// Snap Methods
func snap(to view: UIView, inset: UIEdgeInsets = UIEdgeInsets.zero)
func snap(attribute: Attribute, toEdge viewAttribute: Attribute, on view: UIView, offset: CGFloat)
func snapLeft(_ view: UIView, offset: CGFloat)
func snapRight(_ view: UIView, offset: CGFloat)
func snapBottom(_ view: UIView, offset: CGFloat)
func snapTop(_ view: UIView, offset: CGFloat)
// Size Methods
func size(as view: UIView)
func size(_ size: CGSize)
// Centering Methods
func center(to view: UIView)
func centerX(to view: UIView)
func centerY(to view: UIView)
// Updating methods
public func update(constraint constraintAttribute: Attribute, toConstraint updateAttribute: Attribute, on view: UIView, offset: CGFloat)
public func delete(_ attribute: Attribute)
对接
blueView.exec()
.snap(to: view, inset: .init(top: 5, left: 5, bottom: 5, right: 5))
只需这几行代码,蓝色视图现在有 4 个约束,使用指定的内边距填充 view
您还可以仅对接 1 个约束。为此,需要以下代码
blueView.exec().snap(attribute: .left, toEdge: .left, on: view, offset: 50)
现在,blueView
的左侧约束到 view
的左侧,偏移量为 50 点。 对接方法还可以用于调整视图大小或居中视图
尺寸
SnapLayoutKit通过2个包装方法简化了尺寸设置;size(as: view) 和 size(CGSize)
。轻松使两个视图尺寸相同
redView.exec().size(as: blueView)
或者设置视图为自定义的、硬编码的尺寸
redView.exec().size(.init(width: 100, height: 100))
居中
要在另外的视图上同时轴居中一个视图,只需简单使用
greenView.exec().center(to: blueView)
或者,如果你只想在视图的X轴上居中
greenView.exec().centerX(to: blueView)
对于Y轴来说也是如此
greenView.exec().centerY(to: blueView)
更新约束
要将一个从绑定到greenView
的左侧约束更改为绑定到blueView
的左侧约束,只需简单使用
redView.update(constraint: .left, toConstraint: .left, on: blueView, offset: 0)
或者你可以使用删除方法手动完成
redView.delete(.left).snap(attribute: .left, toEdge: .left, on: blueView, offset: 0)
安全区域
要约束视图位于安全区域内,只需在快照前使用safe()
方法。例如
redView.exec().safe().snap(to: view)
这使红色视图填充安全区域内的view
。
作者
Søren Møller Gade Hansen
许可证
SnapLayoutKit在MIT许可证下可用。有关更多信息,请参阅LICENSE文件