515 lines
23 KiB
Swift
515 lines
23 KiB
Swift
//
|
|
// UIView.swift
|
|
// VDS
|
|
//
|
|
// Created by Matt Bruce on 11/17/22.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
import VDSFormControlsTokens
|
|
|
|
extension UIView {
|
|
|
|
public func constraint(with identifier: String) -> NSLayoutConstraint? {
|
|
return constraints.first { $0.identifier == identifier }
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Pinning
|
|
//--------------------------------------------------
|
|
extension UIView {
|
|
@discardableResult
|
|
/// Pins each to the all 4 anchor points to a view.
|
|
/// - Parameters:
|
|
/// - view: View that you will be pinned within.
|
|
/// - edges: Insets for each side.
|
|
/// - Returns: Yourself.
|
|
public func pin(_ view: UIView, with edges: UIEdgeInsets = UIEdgeInsets.zero) -> Self {
|
|
pinLeading(view.leadingAnchor, edges.left)
|
|
pinTrailing(view.trailingAnchor, edges.right)
|
|
pinTop(view.topAnchor, edges.top)
|
|
pinBottom(view.bottomAnchor, edges.bottom)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
|
|
/// Pins each to the all 4 anchor points to the view you are set within.
|
|
/// - Parameter edges: Insets for each side.
|
|
/// - Returns: Yourself.
|
|
public func pinToSuperView(_ edges: UIEdgeInsets = UIEdgeInsets.zero) -> Self {
|
|
if let superview {
|
|
pin(superview, with: edges)
|
|
}
|
|
return self
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - HeightAnchor
|
|
//--------------------------------------------------
|
|
extension UIView {
|
|
|
|
@discardableResult
|
|
/// Adds a heightAnchor.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func height(_ constant: CGFloat) -> Self {
|
|
height(constant: constant)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a heightAnchor where the height constant passed in using a greaterThanOrEqualTo Constraint.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func heightGreaterThanEqualTo(_ constant: CGFloat) -> Self {
|
|
heightGreaterThanEqualTo(constant: constant)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a heightAnchor where the height constant passed in using a lessThanOrEqualTo Constraint.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func heightLessThanEqualTo(_ constant: CGFloat) -> Self {
|
|
heightLessThanEqualTo(constant: constant)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a heightAnchor for the constant passed into the method.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func height(constant: CGFloat) -> NSLayoutConstraint {
|
|
heightAnchor.constraint(equalToConstant: constant).activate()
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a heightAnchor where the constant passed in using a greaterThanOrEqualTo Constraint.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func heightGreaterThanEqualTo(constant: CGFloat) -> NSLayoutConstraint {
|
|
heightAnchor.constraint(greaterThanOrEqualToConstant: constant).activate()
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a heightAnchor where the constant passed in using a lessThanOrEqualTo Constraint.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func heightLessThanEqualTo(constant: CGFloat) -> NSLayoutConstraint {
|
|
heightAnchor.constraint(lessThanOrEqualToConstant: constant).activate()
|
|
}
|
|
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - WidthAnchor
|
|
//--------------------------------------------------
|
|
extension UIView {
|
|
|
|
@discardableResult
|
|
/// Adds a widthAnchor.
|
|
/// - Parameter constant: Width Constant size.
|
|
/// - Returns: Yourself.
|
|
public func width(_ constant: CGFloat) -> Self {
|
|
width(constant: constant)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a widthAnchor where the constant passed in using a greaterThanOrEqualTo Constraint.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func widthGreaterThanEqualTo(_ constant: CGFloat) -> Self {
|
|
widthGreaterThanEqualTo(constant: constant)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a widthAnchor where the constant passed in using a lessThanOrEqualTo Constraint.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func widthLessThanEqualTo(_ constant: CGFloat) -> Self {
|
|
widthLessThanEqualTo(constant: constant)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a widthAnchor for the constant passed into the method.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func width(constant: CGFloat) -> NSLayoutConstraint {
|
|
widthAnchor.constraint(equalToConstant: constant).activate()
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a widthAnchor with the constant passed in using a greaterThanOrEqualTo Constraint.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func widthGreaterThanEqualTo(constant: CGFloat) -> NSLayoutConstraint {
|
|
widthAnchor.constraint(greaterThanOrEqualToConstant: constant).activate()
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a widthAnchor with the constant passed in using a lessThanOrEqualTo Constraint.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func widthLessThanEqualTo(constant: CGFloat) -> NSLayoutConstraint {
|
|
widthAnchor.constraint(lessThanOrEqualToConstant: constant).activate()
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - TopAnchor
|
|
//--------------------------------------------------
|
|
extension UIView {
|
|
|
|
@discardableResult
|
|
/// Adds a topAnchor.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinTop(_ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
return pinTop(nil, constant, priority)
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a topAnchor to a specific YAxisAnchor.
|
|
/// - Parameter anchor:The anchor in which to attach the topAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinTop(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinTop(anchor: anchor, constant: constant, priority: priority)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a topAnchor to a specific YAxisAnchor passed in using a lessThanOrEqualTo Constraint
|
|
/// - Parameter anchor:The anchor in which to attach the topAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinTopLessThanOrEqualTo(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinTopLessThanOrEqualTo(anchor: anchor, constant: constant, priority: priority)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a topAnchor to a specific YAxisAnchor passed in using a greaterThanOrEqualTo Constraint
|
|
/// - Parameter anchor:The anchor in which to attach the topAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinTopGreaterThanOrEqualTo(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinTopGreaterThanOrEqualTo(anchor: anchor, constant: constant, priority: priority)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a topAnchor for the constant passed into the method.
|
|
/// - Parameter anchor:The anchor in which to attach the topAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinTop(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutYAxisAnchor? = anchor ?? superview?.topAnchor
|
|
guard let found else { return nil }
|
|
return topAnchor.constraint(equalTo: found, constant: constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a topAnchor with the constant passed in using a lessThanOrEqualTo Constraint.
|
|
/// - Parameter anchor:The anchor in which to attach the topAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinTopLessThanOrEqualTo(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutYAxisAnchor? = anchor ?? superview?.topAnchor
|
|
guard let found else { return nil }
|
|
return topAnchor.constraint(lessThanOrEqualTo: found, constant: constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a topAnchor with the constant passed in using a greaterThanOrEqualTo Constraint.
|
|
/// - Parameter anchor:The anchor in which to attach the topAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinTopGreaterThanOrEqualTo(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutYAxisAnchor? = anchor ?? superview?.topAnchor
|
|
guard let found else { return nil }
|
|
return topAnchor.constraint(greaterThanOrEqualTo: found, constant: constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - BottomAnchor
|
|
//--------------------------------------------------
|
|
extension UIView {
|
|
@discardableResult
|
|
/// Adds a bottomAnchor.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinBottom(_ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
return pinBottom(nil, constant, priority)
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a bottomAnchor to a specific YAxisAnchor.
|
|
/// - Parameter anchor:The anchor in which to attach the bottomAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinBottom(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinBottom(anchor: anchor, constant: constant, priority: priority)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a bottomAnchor to a specific YAxisAnchor passed in using a lessThanOrEqualTo Constraint
|
|
/// - Parameter anchor:The anchor in which to attach the bottomAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinBottomLessThanOrEqualTo(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinBottomLessThanOrEqualTo(anchor: anchor, constant: constant, priority: priority)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a bottomAnchor to a specific YAxisAnchor passed in using a greaterThanOrEqualTo Constraint
|
|
/// - Parameter anchor:The anchor in which to attach the bottomAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinBottomGreaterThanOrEqualTo(_ anchor: NSLayoutYAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinBottomGreaterThanOrEqualTo(anchor: anchor, constant: constant, priority: priority)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a bottomAnchor for the constant passed into the method.
|
|
/// - Parameter anchor:The anchor in which to attach the bottomAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinBottom(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutYAxisAnchor? = anchor ?? superview?.bottomAnchor
|
|
guard let found else { return nil }
|
|
return bottomAnchor.constraint(equalTo: found, constant: -constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a bottomAnchor with the constant passed in using a lessThanOrEqualTo Constraint.
|
|
/// - Parameter anchor:The anchor in which to attach the bottomAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinBottomLessThanOrEqualTo(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutYAxisAnchor? = anchor ?? superview?.bottomAnchor
|
|
guard let found else { return nil }
|
|
return bottomAnchor.constraint(lessThanOrEqualTo: found, constant: -constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a bottomAnchor with the constant passed in using a greaterThanOrEqualTo Constraint.
|
|
/// - Parameter anchor:The anchor in which to attach the bottomAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinBottomGreaterThanOrEqualTo(anchor: NSLayoutYAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutYAxisAnchor? = anchor ?? superview?.bottomAnchor
|
|
guard let found else { return nil }
|
|
return bottomAnchor.constraint(greaterThanOrEqualTo: found, constant: -constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - LeadingAnchor
|
|
//--------------------------------------------------
|
|
extension UIView {
|
|
|
|
@discardableResult
|
|
/// Adds a leadingAnchor.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinLeading(_ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
return pinLeading(nil, constant, priority)
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a leadingAnchor to a specific XAxisAnchor.
|
|
/// - Parameter anchor:The anchor in which to attach the leadingAnchor.
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinLeading(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinLeading(anchor: anchor, constant: constant, priority: priority)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a leadingAnchor to a specific XAxisAnchor passed in using a greaterThanOrEqualTo Constraint
|
|
/// - Parameter anchor:The anchor in which to attach the leadingAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinLeadingLessThanOrEqualTo(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinLeadingLessThanOrEqualTo(anchor: anchor, constant: constant, priority: priority)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a leadingAnchor to a specific XAxisAnchor passed in using a greaterThanOrEqualTo Constraint
|
|
/// - Parameter anchor:The anchor in which to attach the leadingAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinLeadingGreaterThanOrEqualTo(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinLeadingGreaterThanOrEqualTo(anchor: anchor, constant: constant, priority: priority)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a leadingAnchor for the constant passed into the method.
|
|
/// - Parameter anchor:The anchor in which to attach the leadingAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinLeading(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutXAxisAnchor? = anchor ?? superview?.leadingAnchor
|
|
guard let found else { return nil }
|
|
return leadingAnchor.constraint(equalTo: found, constant: constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a leadingAnchor with the constant passed in using a lessThanOrEqualTo Constraint.
|
|
/// - Parameter anchor:The anchor in which to attach the leadingAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinLeadingLessThanOrEqualTo(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutXAxisAnchor? = anchor ?? superview?.leadingAnchor
|
|
guard let found else { return nil }
|
|
return leadingAnchor.constraint(lessThanOrEqualTo: found, constant: constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a leadingAnchor with the constant passed in using a greaterThanOrEqualTo Constraint.
|
|
/// - Parameter anchor:The anchor in which to attach the leadingAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinLeadingGreaterThanOrEqualTo(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutXAxisAnchor? = anchor ?? superview?.leadingAnchor
|
|
guard let found else { return nil }
|
|
return leadingAnchor.constraint(greaterThanOrEqualTo: found, constant: constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - TrailingAnchor
|
|
//--------------------------------------------------
|
|
extension UIView {
|
|
|
|
@discardableResult
|
|
/// Adds a trailingAnchor.
|
|
/// - Parameter constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinTrailing(_ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinTrailing(nil, constant)
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a trailingAnchor to a specific XAxisAnchor.
|
|
/// - Parameter anchor:The anchor in which to attach the trailingAnchor.
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinTrailing(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinTrailing(anchor: anchor, constant: constant)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a trailingAnchor to a specific XAxisAnchor passed in using a lessThanOrEqualTo Constraint
|
|
/// - Parameter anchor:The anchor in which to attach the trailingAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinTrailingLessThanOrEqualTo(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0, _ priority: UILayoutPriority = .required) -> Self {
|
|
pinTrailingLessThanOrEqualTo(anchor: anchor, constant: constant)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a trailingAnchor to a specific XAxisAnchor passed in using a greaterThanOrEqualTo Constraint
|
|
/// - Parameter anchor:The anchor in which to attach the trailingAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: Yourself.
|
|
public func pinTrailingGreaterThanOrEqualTo(_ anchor: NSLayoutXAxisAnchor? = nil, _ constant: CGFloat = 0.0) -> Self {
|
|
pinTrailingGreaterThanOrEqualTo(anchor: anchor, constant: constant)
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a trailingAnchor for the constant passed into the method.
|
|
/// - Parameter anchor:The anchor in which to attach the trailingAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinTrailing(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutXAxisAnchor? = anchor ?? superview?.trailingAnchor
|
|
guard let found else { return nil }
|
|
return trailingAnchor.constraint(equalTo: found, constant: -constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a trailingAnchor with the constant passed in using a lessThanOrEqualTo Constraint.
|
|
/// - Parameter anchor:The anchor in which to attach the trailingAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinTrailingLessThanOrEqualTo(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutXAxisAnchor? = anchor ?? superview?.trailingAnchor
|
|
guard let found else { return nil }
|
|
return trailingAnchor.constraint(lessThanOrEqualTo: found, constant: -constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
|
|
@discardableResult
|
|
/// Adds a trailingAnchor with the constant passed in using a greaterThanOrEqualTo Constraint.
|
|
/// - Parameter anchor:The anchor in which to attach the trailingAnchor
|
|
/// - constant: Constant size.
|
|
/// - Returns: The Constraint that was created.
|
|
public func pinTrailingGreaterThanOrEqualTo(anchor: NSLayoutXAxisAnchor?, constant: CGFloat = 0.0, priority: UILayoutPriority = .required) -> NSLayoutConstraint? {
|
|
let found: NSLayoutXAxisAnchor? = anchor ?? superview?.trailingAnchor
|
|
guard let found else { return nil }
|
|
return trailingAnchor.constraint(greaterThanOrEqualTo: found, constant: -constant).with { $0.priority = priority; $0.isActive = true }
|
|
}
|
|
}
|
|
|
|
extension NSLayoutConstraint {
|
|
|
|
@discardableResult
|
|
/// Activates yourself
|
|
/// - Returns: Self
|
|
public func activate() -> Self{
|
|
isActive = true
|
|
return self
|
|
}
|
|
|
|
@discardableResult
|
|
/// Deactivates yourself
|
|
/// - Returns: Self
|
|
public func deactivate() -> Self{
|
|
isActive = false
|
|
return self
|
|
}
|
|
|
|
/// Helper class that holds onto all types of Contraints.
|
|
public class Container {
|
|
public var topConstraint: NSLayoutConstraint?
|
|
public var leadingConstraint: NSLayoutConstraint?
|
|
public var trailingConstraint: NSLayoutConstraint?
|
|
public var bottomConstraint: NSLayoutConstraint?
|
|
public var widthConstraint: NSLayoutConstraint?
|
|
public var heightConstraint: NSLayoutConstraint?
|
|
|
|
public var isActive: Bool = false {
|
|
didSet{
|
|
topConstraint?.isActive = isActive
|
|
bottomConstraint?.isActive = isActive
|
|
leadingConstraint?.isActive = isActive
|
|
trailingConstraint?.isActive = isActive
|
|
heightConstraint?.isActive = isActive
|
|
widthConstraint?.isActive = isActive
|
|
}
|
|
}
|
|
|
|
public init(){}
|
|
}
|
|
|
|
}
|