JSConstraints 1.2.0

JSConstraints 1.2.0

Jonathan Sack 维护。



  • 作者
  • Jonathan Sack

🔗JSConstraints

Version CI Platform License

💡一个专为 **Blazin' Fast Programmatic Constraints-Typing** 而编写的迷你 Swift 库。

JSConstraints 是一个扩展了 UIViewUIStackView 功能性的小型库。



目录








📥安装

JSConstraints 可以通过 CocoaPodsSwift 包管理器 获取。

Cocoapods

通过 Cocoapods 安装,只需在 Podfile 中添加以下行

pod 'JSConstraints'

Swift 包管理器

使用 SPM?在 Xcode 项目中,选择 文件 > Swift 包 > 添加依赖项 并粘贴以下 URL。

https://github.com/jaysack/JSConstraints


📓工作原理?

JSConstraints 移除了在创建编程约束时所需的所有不必要的样板代码。
只需使用以下方法之一来约束任何视图

  • setConstraints()
  • centerIn()
  • pintTo()
// Default
foo.setConstraints([ .top(view.topAnchor) ])

// Shortcut
foo.🔗([ .top(view.topAnchor) ])

导入库

首先,导入库

import JSConstraints


方块

Pink square in Xcode simulator

.square() 枚举表达式非常直观,允许您创建“方形”视图。它将宽度和高度都设置为提供的值。

pinkSquare.setConstraints([ .square(185) ])

刚才发生了什么?

我们将 widthheight 的约束条件都设置为 185



方向约束

Pink constraints to left and bottom in Xcode simulator

// 1. Add to superview
view.addSubview(pinkSquare)

// 2. Set constraints
pinkSquare.setConstraints([
    .leading(view.leadingAnchor),
    .bottom(view.bottomAnchor) + .constant(18)
])

刚才发生了什么?

  1. 我们将 pinkSquare 的约束条件设置为与其上级视图的左侧锚点对齐。
let leadingConstraint = .leading(view.leadingAnchor)

  1. 然后我们将 pinkSquare 再次约束,使其距离上级视图底部锚点18个点。
let bottomConstraint = .bottom(view.bottomAnchor) + .constant(18)

重构格式

让我们将这些放在一起,得到

// Add pink square to superview
view.addSubview(pinkSquare)

// Set constraints
pinkSquare.🔗([ bottomConstraint, leadingConstraint ])

💡 常数参数是可选的,如果没有提供,则用0替换。



相对约束

Pink constraints to left and bottom in Xcode simulator

indigoView.setConstraints([
    .relWidth(view.widthAnchor) * .multiplier(0.4),
    .relHeight(pinkSquare.heightAnchor) * .multiplier(1.18)
])

// We're assuming here that the indigo view's in already in
// its superview's stack and has been constrained from its top and right sides.

刚刚发生了什么?

我们将indigoView的宽度设置为view宽度的0.4倍。
我们还设置了indigoView的宽度比我们的pinkSquare略高。

💡 multiplier参数是可选的,如果没有提供,则默认为1。



对齐视图

Yellow circle in Xcode simulator

yellowCircle.centerIn(superview: self.view)

刚刚发生了什么?

我们在屏幕中央约束了yellowCircle



固定到父视图

Indigo view pinned to superview in Xcode simulator

indigoView.pinTo(superview: self.view, withPadding: 18)


⚠️UILayoutGuide的情况如何?

根据您的需求,您可以选择将视图固定到ViewController的view或其layoutGuide上,因为两者都受到JSConstraints的支持。
使用layoutGuide会自动将子视图添加到布局指南的拥有者视图中。

indigoView.pinTo(layoutGuide: view.safeAreaLayoutGuide) 

// Indigo view was automatically added to `view` subviews


♻️动态约束如何?

JSConstraints方法总是返回成功激活的约束集合。
我们可以用它来在activeinactive状态之间切换。

1. 获取活动约束

// Save returned constraints
var pinkOptionalConstraints = pinkSquare.setConstraints([ bottomConstraint, leadingConstraint ])
var indigoOptionalConstraints = indigoView.setConstraints([ topConstraint, trailingConstraint ])

// Append to array of dynamic constraints
dynamicConstraints.append(contentsOf: pinkOptionalConstraints)
dynamicConstraints.append(contentsOf: indigoOptionalConstraints)

这里,返回了类型为 [NSLayoutConstraint] 的活动约束列表。我们可以将结果保存在 dynamicConstraints 变量中。

2. 更新约束

// Deactivate optional constraints
dynamicConstraints.forEach { $0.isActive = false }

// Set new constraints
[pinkSquare, indigoView].forEach { $0.centerIn(superview: view) }

在此,我们将可选约束停用,然后添加新约束。



3. 动画

 Subviews animations



✉️作者

Jonathan Sack
[邮箱地址 removed]



🔏许可证

版权所有 © 2020 Jonathan Sack

以下条件下,任何获得此软件及其相关文档文件(“软件”)副本的人,均免费获得在此软件上不受限制的权限,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,以及允许将软件提供给他人使用,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“现状”提供,不提供任何明示或暗示的担保,包括但不限于适销性、适用于特定目的和非侵权性担保。在任何情况下,均不承担作者或版权所有者由于合同、侵权或其他方式而产生的任何索赔、损害或其他责任,无论是由于软件或其使用或其他方式引起的。