jrsaruo/acelayout
AceLayout provides a Swifty DSL for Auto Layout.
Requirements
- iOS 11.0+ / macOS 10.13+ / tvOS 11.0+
- Xcode 14.3+
- Swift 5.8+
Features
- Strongly typed.
- The compiler does not accept wrong constraints such as some.top == another.leading.
- Simple, modern and unmistakable APIs.
- No need to write boilerplates.
- view.translatesAutoresizingMaskIntoConstraints = false - constraint.isActive = true
Usage
Basic
Constraints Building
Call the autoLayout method of your UIView, UILayoutGuide, NSView or NSLayoutGuide with a closure that describes Auto Layout constraints.
view.autoLayout { item in
item.top.equal(to: anotherView, plus: 16) // to UIView
item.bottom.equalToSuperview() // to superview
item.leading.equal(to: layoutMarginsGuide) // to UILayoutGuide
item.trailing.equal(to: anotherView.centerXAnchor) // to NSLayoutAnchor
item.width.equal(to: 100) // to constant
item.height.equal(to: item.width) // to LayoutAnchor
}In the example, the followings are done automatically:
- Set
view.translatesAutoresizingMaskIntoConstraintstofalse.
- Activates all constraints.
Relations
view.autoLayout { item in
item.top.greaterThanOrEqual(to: safeAreaLayoutGuide)
item.bottom.lessThanOrEqualToSuperview()
}Priority
UILayoutPriority and NSLayoutConstraint.Priority are available.
view.autoLayout { item in
item.center.equalToSuperview().priority(.required)
item.size.equal(toSquare: 100).priority(.defaultHigh)
}Deactivated Constraints
You can specify an argument activates to determine whether to immediately activate constraints.
let constraints = view.autoLayout(activates: false) { item in
item.edges.equal(to: anotherView)
}
// All constraints are not active.
assert(constraints.allSatisfy { !$0.isActive })
// You can activate them at any time.
NSLayoutConstraint.activate(constraints)Convenient Anchors
Point
view.autoLayout { item in
item.center.equal(to: anotherView)
item.topLeading.equalToSuperview()
}Size
view.autoLayout { item in
item.size.equal(to: CGSize(width: 100, height: 200))
}HorizontalEdges and VerticalEdges
view.autoLayout { item in
item.leadingTrailing.equal(to: anotherView)
item.topBottom.equalToSuperview(insetBy: 16)
}Edges
view.autoLayout { item in
item.edges.equalToSuperview(insetBy: 16)
}Available Anchors
XAxis
leadingtrailingleftrightcenterX
YAxis
topbottomcenterY
Baseline (only UIView / NSView)
firstBaselinelastBaseline
Dimension
widthheight
Point
centertopLeadingtopTrailingtopLefttopRightbottomLeadingbottomTrailingbottomLeftbottomRight
Size
size
HorizontalEdges
leadingTrailingleftRight
VerticalEdges
topBottom
Edges
edges
Using AceLayout in your project
To use the AceLayout library in a SwiftPM project, add the following line to the dependencies in your Package.swift file:
.package(url: "https://github.com/jrsaruo/AceLayout", from: "1.1.3"),and add AceLayout as a dependency for your target:
.target(name: "<target>", dependencies: [
.product(name: "AceLayout", package: "AceLayout"),
// other dependencies
]),Finally, add import AceLayout in your source code.
Package Metadata
Repository: jrsaruo/acelayout
Default branch: main
README: README.md