Skip to content

Instantly share code, notes, and snippets.

@ts95
Last active March 19, 2018 09:11
Show Gist options
  • Save ts95/a72949f6633087537319310e34235f2c to your computer and use it in GitHub Desktop.
Save ts95/a72949f6633087537319310e34235f2c to your computer and use it in GitHub Desktop.
Layout constraint extensions for UIView
import UIKit
protocol LayoutConstrainable {
@discardableResult func height(_ height: CGFloat, priority: UILayoutPriority) -> Self
@discardableResult func width(_ width: CGFloat, priority: UILayoutPriority) -> Self
@discardableResult func size(_ size: CGSize, priority: UILayoutPriority) -> Self
@discardableResult func top(to: Self, constant: CGFloat, priority: UILayoutPriority) -> Self
@discardableResult func leading(to: Self, constant: CGFloat, priority: UILayoutPriority) -> Self
@discardableResult func trailing(to: Self, constant: CGFloat, priority: UILayoutPriority) -> Self
@discardableResult func bottom(to: Self, constant: CGFloat, priority: UILayoutPriority) -> Self
@discardableResult func snap(to: Self, insets: UIEdgeInsets, priority: UILayoutPriority) -> Self
}
extension UIView: LayoutConstrainable {
@discardableResult func height(_ height: CGFloat, priority: UILayoutPriority = .required) -> Self {
translatesAutoresizingMaskIntoConstraints = false
heightAnchor.constraint(equalToConstant: height).isActive = true
return self
}
@discardableResult func width(_ width: CGFloat, priority: UILayoutPriority = .required) -> Self {
translatesAutoresizingMaskIntoConstraints = false
widthAnchor.constraint(equalToConstant: width).isActive = true
return self
}
@discardableResult func size(_ size: CGSize, priority: UILayoutPriority = .required) -> Self {
translatesAutoresizingMaskIntoConstraints = false
widthAnchor.constraint(equalToConstant: size.width).isActive = true
heightAnchor.constraint(equalToConstant: size.height).isActive = true
return self
}
@discardableResult func top(to: UIView, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> Self {
translatesAutoresizingMaskIntoConstraints = false
to.translatesAutoresizingMaskIntoConstraints = false
topAnchor.constraint(equalTo: to.topAnchor, constant: constant).isActive = true
return self
}
@discardableResult func leading(to: UIView, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> Self {
translatesAutoresizingMaskIntoConstraints = false
to.translatesAutoresizingMaskIntoConstraints = false
leadingAnchor.constraint(equalTo: to.leadingAnchor, constant: constant).isActive = true
return self
}
@discardableResult func trailing(to: UIView, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> Self {
translatesAutoresizingMaskIntoConstraints = false
to.translatesAutoresizingMaskIntoConstraints = false
trailingAnchor.constraint(equalTo: to.trailingAnchor, constant: constant).isActive = true
return self
}
@discardableResult func bottom(to: UIView, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> Self {
translatesAutoresizingMaskIntoConstraints = false
to.translatesAutoresizingMaskIntoConstraints = false
bottomAnchor.constraint(equalTo: to.bottomAnchor, constant: constant).isActive = true
return self
}
@discardableResult func snap(to: UIView, insets: UIEdgeInsets = .zero, priority: UILayoutPriority = .required) -> Self {
translatesAutoresizingMaskIntoConstraints = false
to.translatesAutoresizingMaskIntoConstraints = false
topAnchor.constraint(equalTo: to.topAnchor, constant: insets.top).isActive = true
leadingAnchor.constraint(equalTo: to.leadingAnchor, constant: insets.left).isActive = true
bottomAnchor.constraint(equalTo: to.bottomAnchor, constant: -insets.bottom).isActive = true
trailingAnchor.constraint(equalTo: to.trailingAnchor, constant: -insets.right).isActive = true
return self
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment