Swiftstraints can turn verbose auto-layout code:
let constraint = NSLayoutConstraint(item: blueView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: redView, attribute: NSLayoutAttribute.Width, multiplier: 1.0, constant: 0.0)Into one just one line of code:
let constraint = blueView.widthAnchor == redView.widthAnchorOr transform your less than consise visual format language code:
let constraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|[leftView]-10-[rightView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["leftView":leftView, "rightView":rightView])Into the following:
let constraints = NSLayoutConstraints("H:|[\(leftView)]-10-[\(rightView)]|")That was easy!
Swiftstraints is available through CocoaPods. To install, simply include the following lines in your podfile:
use_frameworks! pod 'Swiftstraints'Be sure to import the module at the top of your .swift files:
import SwiftstraintsAlternatively, clone this repo or download it as a zip and include the classes in your project.
With Swiftstraints you can create constraints that look just Apple's generic constraint definition:
item1.attribute1 = multiplier × item2.attribute2 + constantSwifstraints utilizes the new layout anchors introduced in iOS 9:
let view = UIView() view.widthAnchor view.heightAnchor view.trailingAnchor view.centerXAnchor etc...Swiftstraints implements operator overloading so that you can easily create custom constraints:
let blueView = UIView() let redView = UIView() let constraint = blueView.heightAnchor == redView.heightAnchorJust as you would expect, you can specify a multiplier:
let constraint = blueView.heightAnchor == 2.0 * redView.heightAnchorOr add a constant:
let constraint = blueView.heightAnchor == redView.heightAnchor + 10.0You can specify inequalities:
let constraint = blueView.heightAnchor <= redView.heightAnchorAnd you can define constant constraints if you so choose:
let constraint = blueView.heightAnchor == 100.0Swiftstraints can readily compute relatively complex constraints:
let constraint = blueView.heightAnchor * 1.4 - 5.0 >= redView.heightAnchor / 3.0 + 400It's really easy.
Apple provides an API that lets you create multiple constraints simultaneously with the Visual Format Language. As we saw before it can be a little cumbersome:
let constraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|[leftView]-10-[rightView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["leftView":leftView, "rightView":rightView])Swiftstraints uses string interpolation to let you specify the same constraints in one line of code:
let constraints = NSLayoutConstraints("H:|[\(leftView)]-10-[\(rightView)]|")Swiftstraints also extends UIView so that you can add constraints easily using the interpolated string format:
superview.addConstraints("H:|[\(leftView)]-10-[\(rightView)]|")Super easy, super simple.
- 3.0.1 - Bug fixes and limited iOS 8 support (Thank you catjia1011)
 - 3.0.0 - Updated to Swift 3
 - 2.2.0 - Added support for UILayoutPriority
 - 2.1.0 - Fixed a view reference bug and added a new convenience method for adding constraints
 - 2.0.2 - Added support for tvOS target.
 - 2.0.1 - Updated to include support for axis anchors, increased test coverage and more documentation.
 - 2.0.0 - Updated for Swift 2.0 and iOS 9. Now uses layout anchors for simple constraints and string interpolation for Visual Format Language constraints.
 - 1.1.0 - Minor API tweaks
 - 1.0.0 - Initial Release
 
Brad Hilton, brad.hilton.nw@gmail.com
Swiftstraints is available under the MIT license. See the LICENSE file for more info.