SnapLayoutKit 1.1

SnapLayoutKit 1.1

Søren Gade 维护。



  • Søren Møller Gade Hansen

SnapLayoutKit

Build Status Cocoapods platforms Cocoapods Cocoapods

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文件