Skip to content

Instantly share code, notes, and snippets.

@samsonjs
Created October 4, 2017 19:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samsonjs/cbd8680abad40b1aabc7520caaa7db23 to your computer and use it in GitHub Desktop.
Save samsonjs/cbd8680abad40b1aabc7520caaa7db23 to your computer and use it in GitHub Desktop.
import UIKit
@objc
extension UIView {
func constrain(_ constraints: [NSLayoutConstraint]) {
translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate(constraints)
}
@discardableResult
func constrainEdges(to view: UIView, insets: UIEdgeInsets) -> [NSLayoutConstraint] {
let constraints = constraintsForEdges(to: view, insets: insets)
constrain(constraints)
return constraints
}
@discardableResult
func constrainEdges(to view: UIView, inset: CGFloat = 0) -> [NSLayoutConstraint] {
let constraints = constraintsForEdges(to: view, inset: inset)
constrain(constraints)
return constraints
}
@discardableResult
func constrainCenter(to view: UIView) -> [NSLayoutConstraint] {
let constraints = constraintsForCenter(to: view)
constrain(constraints)
return constraints
}
@discardableResult
func constrainSize(to size: CGSize, priority: UILayoutPriority = UILayoutPriority.required) -> [NSLayoutConstraint] {
let constraints = constraintsFor(size: size)
constraints.forEach { $0.priority = priority }
constrain(constraints)
return constraints
}
@discardableResult
func constrainSize(width: CGFloat, height: CGFloat, priority: UILayoutPriority = UILayoutPriority.required) -> [NSLayoutConstraint] {
let constraints = constraintsFor(width: width, height: height)
constraints.forEach { $0.priority = priority }
constrain(constraints)
return constraints
}
func constraintsForEdges(to view: UIView, inset: CGFloat = 0) -> [NSLayoutConstraint] {
let insets = UIEdgeInsets(top: inset, left: inset, bottom: inset, right: inset)
return constraintsForEdges(to: view, insets: insets)
}
func constraintsForEdges(to view: UIView, insets: UIEdgeInsets) -> [NSLayoutConstraint] {
return [
leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: insets.left),
trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -insets.right),
topAnchor.constraint(equalTo: view.topAnchor, constant: insets.top),
bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -insets.bottom),
]
}
func constraintsForCenter(to view: UIView) -> [NSLayoutConstraint] {
return [
centerXAnchor.constraint(equalTo: view.centerXAnchor),
centerYAnchor.constraint(equalTo: view.centerYAnchor),
]
}
func constraintsFor(width: CGFloat, height: CGFloat) -> [NSLayoutConstraint] {
return [
widthAnchor.constraint(equalToConstant: width),
heightAnchor.constraint(equalToConstant: height),
]
}
func constraintsFor(size: CGSize) -> [NSLayoutConstraint] {
return [
widthAnchor.constraint(equalToConstant: size.width),
heightAnchor.constraint(equalToConstant: size.height),
]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment