Anchora
一个小框架,通过使用本地风格抽象 UIKit 的 Auto Layout 引擎来整理约束。
使用方法
每个约束都是一个以下格式的线性方程
item1.attribute1 = multiplier * item2.attribute2 + constant
Anchora 利用此方程提供一种方便且直观的方法来以本地风格构建约束。
单个约束使用以下方法构建:equals(_:)
、lessOrEquals(_:)
、greaterOrEquals(_:)
,每个方法都表示一个布局关系,并接受以下格式的单个表达式,其中 multiplier
和 constant
是可选的
anchor [* or /] multiplier [+ or -] constant
例如
view1.centerXAnchor.equals(view2.centerXAnchor * 2 + 10)
view1.rightAnchor.lessOrEquals(view2.leftAnchor - 8)
view1.heightAnchor.equals(view2.heightAnchor)
作为一个例外,NSLayoutDimension
约束可以直接接受一个数字。
view.widthAnchor.equals(80)
锚点分组
除了我们所有人熟知的现有锚点之外,Anchora 还内置了一些锚点分组,这使得在同时构建多个相关约束时非常简短。一个分组中锚点的顺序非常重要!
centerAnchors
== (centerXAnchor
,centerYAnchor
)sizeAnchors
== (widthAnchor
,heightAnchor
)edgeAnchors
== (topAnchor
,leftAnchor
,bottomAnchor
,rightAnchor
)
constrain(...)
方法允许通过将一组单个锚点与其所属锚点分组中的等效锚点关联来创建约束,而 equal(_:)
是 equals(_:)
为单个锚点的批量变体
view1.edgeAnchors.equal(view2.edgeAnchors)
// Equivalent to
view1.topAnchor.equals(view2.topAnchor)
view1.leftAnchor.equals(view2.leftAnchor)
view1.bottomAnchor.equals(view2.bottomAnchor)
view1.rightAnchor.equals(view2.rightAnchor)
view1.sizeAnchors.equal(100)
// Equivalent to
view1.widthAnchor.equals(100)
view1.heightAnchor.equals(100)
view1.centerAnchors.constrain(view2.centerXAnchor - 10, view2.centerYAnchor)
// Equivalent to
view1.centerXAnchor.equals(view2.centerXAnchor - 10)
view1.centerYAnchor.equals(view2.centerYAnchor)
为了方便,Anchora 方法返回可丢弃的活动约束。如果您需要一个非活动约束,请使用 inactive()
。
let constraint = view1.rightAnchor.equals(view2.leftAnchor - 8).inactive()
要求
- Xcode 9+
- Swift 4+
- iOS 10+
安装
您可以使用CocoaPods将Anchora集成。将其添加到Podfile
并运行$ pod install
。
platform :ios, '10.0'
use_frameworks!
target '<Your Target>' do
pod 'Anchora'
end