TinyConstraints is the syntactic sugar that makes Auto Layout sweeter for human use.
Features
- Pure Swift 5 sweetness.
 - Everything you can do with Auto Layout, but shorter.
 - Constraints are active by default.
 - 100% compatible with other Auto Layout code.
 - Optionally store your constraints.
 - Set constraint priorities upon creation.
 - Constrain directly to the superview.
 - Stack views together with one line of code.
 -  No need to set 
translatesAutoresizingMaskIntoConstraintsbecauseTinyConstraintsdoes it for you. 
Examples
Edges
Attaching a view to its superview with NSLayoutConstraint:
NSLayoutConstraint.activate([
    view.topAnchor.constraint(equalTo: superview.topAnchor, constant: 0),
    view.leadingAnchor.constraint(equalTo: superview.leadingAnchor, constant: 0),
    view.bottomAnchor.constraint(equalTo: superview.bottomAnchor, constant: 0),
    view.trailingAnchor.constraint(equalTo: superview.trailingAnchor, constant: 0)
])
with TinyConstraints:
view.edgesToSuperview()
or:
view.edgesToSuperview(insets: .top(10) + .left(10))
Center
Constraining the center of a view to its superview with NSLayoutConstraint:
NSLayoutConstraint.activate([
    view.centerXAnchor.constraint(equalTo: superview.centerXAnchor, constant: 0)
    view.centerYAnchor.constraint(equalTo: superview.centerYAnchor, constant: 0)
])
with TinyConstraints:
view.center(in: superview)
or:
view.center(in: superview, offset: CGPoint(x: 10, y: 10))
Basic Use
Typealiases
TinyConstraints gives you convenient and tiny typealiases for handling constraints.
Constraint=NSLayoutConstraintConstraints=[NSLayoutConstraint]
Equal and Unequal Anchors
This constraints the top-anchor of the view to the top-anchor of the superview:
view.top(to: superview)
This constraints the top-anchor of firstView to the bottom-anchor of secondView:
firstView.topToBottom(of: secondView)
Constrain to Superview
Often you need to constrain a view to it's superview, with TinyConstraints you can do this super easy:
view.edgesToSuperview()
Or only one edge:
view.topToSuperview()
Or you can attach all edges except one, like this:
view.edgesToSuperview(excluding: .bottom)
Relation and Priority
For almost all constraints you can set the relation and priority properties. The default relation is .equal and the default priority is .required:
container.width(150, relation: .equalOrLess, priority: .high)
Storing Constraints
Here we create a set of inactive constraints and store these to our property:
let constraints = view.size(CGSize(width: 100, height: 100), isActive: false)
Activation and Deactivation
Besides the default NSLayoutConstraint activation, TinyConstraints also provides a way to activate a set of constraints:
constraints.activate()
You can also do this in an animation:
oldConstraints.deActivate()
constraints.activate()
UIViewPropertyAnimator(duration: 1, dampingRatio: 0.4) {
    self.layoutIfNeeded()
}.startAnimation()
Animating Constraint Constants
Here we add a height constraint to a view, store it and animate it later:
let height = view.height(100)
height.constant = 200
UIViewPropertyAnimator(duration: 1, dampingRatio: 0.4) {
    self.layoutIfNeeded()
}.startAnimation()
Stack
Stack provides a way of constraining views together in a superview:
let views = [logo, title, description]
superview.stack(views, axis: .vertical, spacing: 10)
Find these examples and more in the Example Project.
Installation
CocoaPods
TinyConstraints is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "TinyConstraints"
Carthage
TinyConstraints is available through Carthage. To install it, simply add the following line to your Cartfile:
github "roberthein/TinyConstraints"
Swift Package Manager
TinyConstraints is available through Swift Package Manager. To install it, in Xcode 11.0 or later select File > Swift Packages > Add Package Dependency... and add TinyConstraints repository URL:
https://github.com/roberthein/TinyConstraints.git
Tutorials
Here are some video tutorials made by Alex Nagy.
Suggestions or feedback?
Feel free to create a pull request, open an issue or find me on Twitter.



