roberthein/TinyConstraints
roberthein/TinyConstraints has 4,079 GitHub stars and 194 forks. GitHot measured -1 stars in 24 hours. Last checked 2026-11-06 17:38 UTC. Last push 2024-04-16.
Nothing but sugar.
What you can do
- 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.
Measured star growth
- in 24h
- -1
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalTinyConstraints 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.
Explore related projects
ytdl-org/youtube-dl
Command-line program to download videos from YouTube.com and other video sites
141,474 starsexcalidraw/excalidraw
Virtual whiteboard for sketching hand-drawn like diagrams
135,243 starsgodotengine/godot
Godot Engine – Multi-platform 2D and 3D game engine
119,656 starsmrdoob/three.js
JavaScript 3D Library.
117,745 stars