Intuitive and powerful Auto Layout library
Switch branches/tags
Nothing to show
Clone or download
Latest commit e3327e5 Nov 24, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Docs Update full guide May 21, 2018
Sources Remove deprecated methods Oct 2, 2018
Supporting Version 1.0 Oct 2, 2018
Tests Use Xcode 10 and Swift 4.2 Oct 1, 2018
Yalta.playground Remove Stacks and Spacers Jan 10, 2018
Yalta.xcodeproj Remove deprecated methods Oct 2, 2018
.gitignore Initial commit Nov 7, 2017
.travis.yml Fix destination Oct 1, 2018
CHANGELOG.md Version 1.0 Oct 2, 2018
LICENSE Initial commit Nov 7, 2017
Package.swift Rename to Yalta Nov 8, 2017
README.md Update README.md Nov 24, 2018
Yalta.podspec Version 1.0 Oct 2, 2018

README.md

⛵️ Yalta

An intuitive and powerful Auto Layout library.

The entire library fits in a single file with less than 300 lines of code which you can just drag-n-drop into your app.

Yalta strives for clarity and simplicity by following Swift API Design Guidelines. Although most of the APIs are compact, it is a non-goal to enable the most concise syntax possible. Instead, Yalta has a fluent API that makes use sites form grammatical English phrases - that's what makes Swift code really stand out.

Anchors

Start by selecting an anchor or a collection of anchors of a view (or of a layout guide). Then use anchor's methods to create constraints.

Anchors represent layout attributes of a view including edges, dimensions, axis, and baselines.

Each anchor and collection of anchors have methods tailored for that particular kind of anchor:

Constraints(for: title, subtitle) { title, subtitle in
    // Align one anchor with another
    subtitle.top.align(with: title.bottom + 10)

    // Align center with a superview
    title.centerX.alignWithSuperview()

    // Manipulate dimenstions
    title.width.set(100)
    subtitle.width.match(title.width * 2)

    // Change a priority of constraints inside a group:
    subtitle.bottom.pinToSuperview().priority = UILayoutPriority(999)
}

All anchors can be also be accessed using .al proxy:

title.al.top.pinToSuperview()

The best way to access anchors is by using a special addSubview(_:constraints:) method (supports up to 4 views). Here are some examples of what you can do using anchors:

view.addSubview(subview) {
    $0.edges.pinToSuperview(insets: Insets(10)) // Pin to superview edges
}
view.addSubview(subview) {
    $0.edges.pinToSuperviewMargins() // Or margins
}
view.addSubview(subview) {
    $0.edges(.left, .right).pinToSuperview() // Fill along horizontal axis
    $0.centerY.alignWithSuperview() // Center along vertical axis
}

With addSubview(_:constraints:) method you define a view hierarchy and layout views at the same time. It encourages splitting layout code into logical blocks and prevents some programmer errors (e.g. trying to add constraints to views which are not in a view hierarchy).

Yalta has full test coverage. If you'd like to learn about which constraints (NSLayoutConstraint) Yalta creates each time you call one of its methods, test cases are a great place to start.

Requirements

  • iOS 9.0, tvOS 9.0
  • Xcode 10
  • Swift 4.2

Why Yalta

Yalta is for someone who:

Yalta is a beautiful port city on the Black Sea and a great name for yet another layout tool with anchors.