Popularity
0.7
Growing
Activity
0.0
Stable
15
4
1

Code Quality Rank: L5
Programming language: Swift
License: MIT License
Tags: Layout     Auto Layout    
Latest version: v4.0.2

SwiftyLayout alternatives and similar libraries

Based on the "Auto Layout" category.
Alternatively, view SwiftyLayout alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of SwiftyLayout or a related project?

Add another 'Auto Layout' Library

README

SwiftyLayout

GitHub license Carthage compatible GitHub release build passing

Join the chat at https://gitter.im/fhisa/SwiftyLayout

SwiftyLayout is a framework that allows to describe layout constraints (ie NSLayoutConstraint) as a simple mathematical formula in a Swift program.

About Version

  • SwiftyLayout 3 for Swift 2
  • SwiftyLayout 4 for Swift 3

Code Examples

Basic usage

Using the framework, a layout constraint that "the width of the view A is equal to minus 4.0 to 50% of the width of the Views B" follows:

viewA[.Width] == 0.5 * viewB[.Width] - 4.0

This is the same layout constraints with the following code:

NSLayoutConstraint(
    item: viewA, attribute: .Width,
    relatedBy: .Equal,
    toItem: viewB, attribute: .Width,
    multiplier: 0.5, constant: -4.0)

e.g. Aspect ratio

A layout constraint that "the aspect ratio of the view A is 3:4" follows:

viewA[.Width] * 3.0 == viewA[.Height] * 4.0

This is the same layout constraints with the following code:

NSLayoutConstraint(
    item: viewA, attribute: .Width,
    relatedBy: .Equal,
    toItem: viewA, attribute: .Height,
    multiplier: 4.0/3.0, constant: 0.0)

e.g. Specify the priority

The framework has priority specification operator ~ like the following.

innerView[.Leading] == outerView[.Leading] + 4.0 ~ 750.0

This is the same layout constraints with the following code:

var constraint = NSLayoutConstraint(
    item: innerView, attribute: .Leading,
    relatedBy: .Equal,
    toItem: outerView, attribute: .Leading,
    multiplier: 1.0, constant: 4.0)
constraint.priority = 750.0
// -> constraint

Please refer to the code for the sample application and test case, too.

Refrence Guide

ConstraintTerm

ConstraintTerm means a term that contains a view in the right side or the left side of a layout constraint. For example, a ConstraintTerm representing the width .Width of view viewA:

viewA[.Width]

viewA is a UIView instance object, .Width is a NSLayoutAttribute value. ConstraintTerm is defined as a structure such as the following:

public struct ConstraintTerm
{
    let view: UIView?
    let attribute: NSLayoutAttribute
    var multiplier: CGFloat = 1.0
    var constant: CGFloat = 0.0
}

Operators

The following table, CONSTANT means CGFloat value

operator lhs rhs value semantics
+ ConstraintTerm CONSTANT ConstraintTerm add rhs value to lhs.constant
+ CONSTANT ConstraintTerm ConstraintTerm add lhs value to rhs.constant
- ConstraintTerm CONSTANT ConstraintTerm subtract rhs value from lhs.constant
* ConstraintTerm CONSTANT ConstraintTerm multiply rhs value to lhs.multiplier and lhs.constant
* CONSTANT ConstraintTerm ConstraintTerm multiply lhs value to rhs.multiplier and rhs.constant
/ ConstraintTerm CONSTANT ConstraintTerm divide lhs.multiplier and lhs.constant by rhs value
== ConstraintTerm ConstraintTerm NSLayoutConstraint create a layout constraint that "lhs is equal to lhs"
== ConstraintTerm CONSTANT NSLayoutConstraint ditto
== CONSTANT ConstraintTerm NSLayoutConstraint ditto
<= ConstraintTerm ConstraintTerm NSLayoutConstraint create a layout constraint that "lhs is less than or equal to lhs"
<= ConstraintTerm CONSTANT NSLayoutConstraint ditto
<= CONSTANT ConstraintTerm NSLayoutConstraint ditto
>= ConstraintTerm ConstraintTerm NSLayoutConstraint create a layout constraint that "lhs is greater than or equal to lhs"
>= ConstraintTerm CONSTANT NSLayoutConstraint ditto
>= CONSTANT ConstraintTerm NSLayoutConstraint ditto
~ NSLayoutConstraint CONSTANT(Float) NSLayoutConstraint Change the priority of a layout constraint, and return the constraint

Requirements

  • Swift 2.0 (Xcode 7 or later)
  • iOS
    • iOS 8 or later / iOS 7 (by coping the source files directly)
  • Mac
    • Mac OS X 10.10 or later

Installation

There are two options.

Using Carthage

Using Carthage, it's easy to add SwiftyLayout to the project.

  • Add github "fhisa/SwiftyLayout" to your Cartfile.
  • Run carthage update
  • Add SwiftyLayout.framework in Carthage/Build/iOS to your Xcode project.

Copying source files directly (iOS 7)

  • Add this repository as a git submodule: shell $ git submodule add https://github.com/fhisa/SwiftyLayout.git PATH_TO_SUBMODULE // or $ carthage update --use-submodules
  • Then just add references of SwiftyLayout/*.swift to your Xcode project.

TODO

license

SwiftyLayout is released under the MIT license.


*Note that all licence references and agreements mentioned in the SwiftyLayout README section above are relevant to that project's source code only.