Skip to content
master
Go to file
Code

Latest commit

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

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:
$ 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.

About

Lightweight declarative auto-layout framework for Swift

Resources

License

Packages

No packages published
You can’t perform that action at this time.