Created
July 10, 2017 11:16
-
-
Save malcolmkmd/2f3b9fefd1c05aa4097fcb70d18e2cbd to your computer and use it in GitHub Desktop.
UIView Extensions
This file contains 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
import Foundation | |
import UIKit | |
extension UIView { | |
func addConstraintsWithFormat(_ format: String, views: UIView...) { | |
var viewsDictionary = [String: UIView]() | |
for (index, view) in views.enumerated() { | |
let key = "v\(index)" | |
viewsDictionary[key] = view | |
view.translatesAutoresizingMaskIntoConstraints = false | |
} | |
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: format, options: NSLayoutFormatOptions(), metrics: nil, views: viewsDictionary)) | |
} | |
func anchorFillSuperview() { | |
translatesAutoresizingMaskIntoConstraints = false | |
if let superview = superview { | |
leftAnchor.constraint(equalTo: superview.leftAnchor).isActive = true | |
rightAnchor.constraint(equalTo: superview.rightAnchor).isActive = true | |
topAnchor.constraint(equalTo: superview.topAnchor).isActive = true | |
bottomAnchor.constraint(equalTo: superview.bottomAnchor).isActive = true | |
} | |
} | |
func anchorToTop(_ top: NSLayoutYAxisAnchor? = nil, left: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil) { | |
anchorWithConstantsToTop(top, left: left, bottom: bottom, right: right, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0) | |
} | |
func anchorWithConstantsToTop(_ top: NSLayoutYAxisAnchor? = nil, left: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil, topConstant: CGFloat = 0, leftConstant: CGFloat = 0, bottomConstant: CGFloat = 0, rightConstant: CGFloat = 0) { | |
_ = anchor(top, left: left, bottom: bottom, right: right, topConstant: topConstant, leftConstant: leftConstant, bottomConstant: bottomConstant, rightConstant: rightConstant) | |
} | |
func anchor(_ top: NSLayoutYAxisAnchor? = nil, left: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil, topConstant: CGFloat = 0, leftConstant: CGFloat = 0, bottomConstant: CGFloat = 0, rightConstant: CGFloat = 0, widthConstant: CGFloat = 0, heightConstant: CGFloat = 0) { | |
translatesAutoresizingMaskIntoConstraints = false | |
var anchors = [NSLayoutConstraint]() | |
if let top = top { | |
anchors.append(topAnchor.constraint(equalTo: top, constant: topConstant)) | |
} | |
if let left = left { | |
anchors.append(leftAnchor.constraint(equalTo: left, constant: leftConstant)) | |
} | |
if let bottom = bottom { | |
anchors.append(bottomAnchor.constraint(equalTo: bottom, constant: -bottomConstant)) | |
} | |
if let right = right { | |
anchors.append(rightAnchor.constraint(equalTo: right, constant: -rightConstant)) | |
} | |
if widthConstant > 0 { | |
anchors.append(widthAnchor.constraint(equalToConstant: widthConstant)) | |
} | |
if heightConstant > 0 { | |
anchors.append(heightAnchor.constraint(equalToConstant: heightConstant)) | |
} | |
anchors.forEach({$0.isActive = true}) | |
} | |
public func anchor(width: CGFloat, height: CGFloat){ | |
anchor(nil, left: nil, bottom: nil, right: nil, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: width, heightConstant: height) | |
} | |
public func anchorCenterXToSuperview(constant: CGFloat = 0) { | |
translatesAutoresizingMaskIntoConstraints = false | |
if let anchor = superview?.centerXAnchor { | |
centerXAnchor.constraint(equalTo: anchor, constant: constant).isActive = true | |
} | |
} | |
public func anchorCenterYToSuperview(constant: CGFloat = 0) { | |
translatesAutoresizingMaskIntoConstraints = false | |
if let anchor = superview?.centerYAnchor { | |
centerYAnchor.constraint(equalTo: anchor, constant: constant).isActive = true | |
} | |
} | |
public func anchorCenterSuperview() { | |
anchorCenterXToSuperview() | |
anchorCenterYToSuperview() | |
} | |
public func anchorLeftRight(left: NSLayoutXAxisAnchor? = nil, leftConstant: CGFloat, right: NSLayoutXAxisAnchor? = nil, rightConstant: CGFloat){ | |
anchor(nil, left: left, bottom: nil, right: right, topConstant: 0, leftConstant: leftConstant, bottomConstant: 0, rightConstant: rightConstant, widthConstant: 0, heightConstant: 0) | |
} | |
public func anchorCenter(to view: UIView, constantX: CGFloat = 0, constantY: CGFloat = 0){ | |
translatesAutoresizingMaskIntoConstraints = false | |
let anchorX = view.centerXAnchor | |
let anchorY = view.centerYAnchor | |
centerXAnchor.constraint(equalTo: anchorX, constant: constantX).isActive = true | |
centerYAnchor.constraint(equalTo: anchorY, constant: constantY).isActive = true | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment