Swift sweet syntactic stack Objective-C Ruby center Library arkit constraints swift5 layout animation libraries swift4 sugar auto swift-5 constraint nslayoutconstraint nslayoutconstraints superview
Need help with TinyConstraints?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.
roberthein

Description

Nothing but sugar.

3.5K Stars 179 Forks MIT License 195 Commits 9 Opened issues

Services available

Need anything else?

TinyConstraints is the syntactic sugar that makes Auto Layout sweeter for human use.

TinyConstraints TinyConstraints

Features

  • [X] Pure Swift 5 sweetness.
  • [X] Everything you can do with Auto Layout, but shorter.
  • [X] Constraints are active by default.
  • [X] 100% compatible with other Auto Layout code.
  • [X] Optionally store your constraints.
  • [X] Set constraint priorities upon creation.
  • [X] Constrain directly to the superview.
  • [X] Stack views together with one line of code.
  • [X] No need to set
    translatesAutoresizingMaskIntoConstraints
    because
    TinyConstraints
    does 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
    =
    NSLayoutConstraint
  • Constraints
    =
    [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.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.