Created
August 4, 2016 17:56
-
-
Save ksmandersen/c22ad30cacb1f1b1847738da5d0e7871 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public extension UIView { | |
func alignCenterX(_ constant: CGFloat = 0, multiplier: CGFloat = 1, to view: UIView, | |
attribute: NSLayoutAttribute = .centerX, | |
relation: NSLayoutRelation = .equal, | |
priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint { | |
return alignAttribute(attribute: .centerX, relation: relation, | |
to: view, otherAttribute: attribute, | |
multiplier: multiplier, | |
constant: constant, priority: priority) | |
} | |
func alignCenterY(_ constant: CGFloat = 0, multiplier: CGFloat = 1, to view: UIView, | |
attribute: NSLayoutAttribute = .centerY, | |
relation: NSLayoutRelation = .equal, | |
priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint { | |
return alignAttribute(attribute: .centerY, relation: relation, | |
to: view, otherAttribute: attribute, | |
multiplier: multiplier, | |
constant: constant, priority: priority) | |
} | |
func alignCenter(to view: UIView) -> [NSLayoutConstraint] { | |
return [alignCenterX(to: view), alignCenterY(to: view)] | |
} | |
} | |
public extension UIView { | |
func alignHeight(_ constant: CGFloat = 0, multiplier: CGFloat = 1, to view: UIView, | |
attribute: NSLayoutAttribute = .height, | |
relation: NSLayoutRelation = .equal, | |
priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint { | |
return alignAttribute(attribute: .height, relation: relation, | |
to: view, otherAttribute: attribute, | |
multiplier: multiplier, | |
constant: constant, priority: priority) | |
} | |
func constraintHeight(constant: CGFloat) -> NSLayoutConstraint { | |
return alignAttribute(attribute: .height, relation: .equal, to: nil, | |
otherAttribute: .height, constant: constant) | |
} | |
} | |
public extension UIView { | |
func alignWidth(_ constant: CGFloat = 0, multiplier: CGFloat = 1, to view: UIView, | |
attribute: NSLayoutAttribute = .width, | |
relation: NSLayoutRelation = .equal, | |
priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint { | |
return alignAttribute(attribute: .width, relation: relation, | |
to: view, otherAttribute: attribute, | |
multiplier: multiplier, | |
constant: constant, priority: priority) | |
} | |
func constraintWidth(constant: CGFloat) -> NSLayoutConstraint { | |
return alignAttribute(attribute: .width, relation: .equal, to: nil, | |
otherAttribute: .width, constant: constant) | |
} | |
} | |
public extension UIView { | |
func alignLeading(_ constant: CGFloat = 0, multiplier: CGFloat = 1, to view: UIView, | |
attribute: NSLayoutAttribute = .leading, | |
relation: NSLayoutRelation = .equal, | |
priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint { | |
return alignAttribute(attribute: .leading, relation: relation, | |
to: view, otherAttribute: attribute, | |
multiplier: multiplier, | |
constant: constant, priority: priority) | |
} | |
func alignTrailing(_ constant: CGFloat = 0, multiplier: CGFloat = 1, to view: UIView, | |
attribute: NSLayoutAttribute = .trailing, | |
relation: NSLayoutRelation = .equal, | |
priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint { | |
return alignAttribute(attribute: .trailing, relation: relation, | |
to: view, otherAttribute: attribute, | |
multiplier: multiplier, | |
constant: constant, priority: priority) | |
} | |
func alignTop(_ constant: CGFloat = 0, multiplier: CGFloat = 1, to view: UIView, | |
attribute: NSLayoutAttribute = .top, | |
relation: NSLayoutRelation = .equal, | |
priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint { | |
return alignAttribute(attribute: .top, relation: relation, | |
to: view, otherAttribute: attribute, | |
multiplier: multiplier, | |
constant: constant, priority: priority) | |
} | |
func alignBottom(_ constant: CGFloat = 0, multiplier: CGFloat = 1, to view: UIView, | |
attribute: NSLayoutAttribute = .bottom, | |
relation: NSLayoutRelation = .equal, | |
priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint { | |
return alignAttribute(attribute: .bottom, relation: relation, | |
to: view, otherAttribute: attribute, | |
multiplier: multiplier, | |
constant: constant, priority: priority) | |
} | |
} | |
public extension UIView { | |
func alignAttribute(attribute: NSLayoutAttribute, relation: NSLayoutRelation, | |
to otherView: UIView? = nil, | |
otherAttribute: NSLayoutAttribute = .notAnAttribute, | |
multiplier: CGFloat = 1, constant: CGFloat = 0, | |
priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint { | |
return alignUsing(item: self, attribute, relation, otherView, otherAttribute, | |
multipler: multiplier, constant: constant, priority: priority) | |
} | |
} | |
private extension UIView { | |
func alignUsing(item: UIView, _ attribute: NSLayoutAttribute, _ relation: NSLayoutRelation, | |
_ otherItem: UIView? = nil, | |
_ otherAttribute: NSLayoutAttribute = .notAnAttribute, | |
multipler: CGFloat = 1, constant: CGFloat = 0, | |
priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint { | |
let constraint = NSLayoutConstraint(item: item, attribute, relation, otherItem, | |
otherAttribute, multipler: multipler, | |
constant: constant, priority: priority) | |
addConstraint(constraint) | |
return constraint | |
} | |
} | |
private extension NSLayoutConstraint { | |
convenience init(item: UIView, _ attribute: NSLayoutAttribute, _ relation: NSLayoutRelation, | |
_ otherItem: UIView? = nil, _ otherAttribute: NSLayoutAttribute = .notAnAttribute, | |
multipler: CGFloat = 1, constant: CGFloat = 0, | |
priority: UILayoutPriority = UILayoutPriorityRequired) { | |
self.init(item: item, attribute: attribute, relatedBy: relation, toItem: otherItem, | |
attribute: otherAttribute, multiplier: multiplier, constant: constant) | |
self.priority = priority | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment