Nav apraksta

AutolayoutKit-Swift.swift 6.9KB

    // // AutolayoutKit-Swift.swift // PaiAi // // Created by mac on 16/7/21. // Copyright © 2016年 FFIB. All rights reserved. // import UIKit extension Array where Element : NSLayoutConstraint { func autolayoutInstall() { self.forEach { $0.active() } } func autolayoutUnInstall() { self.forEach { $0.active() } } } extension UIView { @discardableResult func useAutoLayout() -> Self { translatesAutoresizingMaskIntoConstraints = false return self } @discardableResult func setLayoutHeight(_ height: CGFloat) -> Self { NSLayoutConstraint(item: self as UIView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: height).active() return self } @discardableResult func setLayoutWidth(_ width: CGFloat) -> Self { NSLayoutConstraint(item: self as UIView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: width).active() return self } } extension NSLayoutConstraint { @discardableResult func active(_ priority: UILayoutPriority = UILayoutPriority.required) -> Self { // if self.priority != priority { // self.priority = priority // } self.isActive = true return self } func deActive() { self.isActive = false } } extension NSLayoutConstraint { // MARK: - -size static func equalSize(_ priority: UILayoutPriority = UILayoutPriority.required, views: UIView...) { equalSize(priority, views : views) } static func equalSize(_ priority: UILayoutPriority = UILayoutPriority.required, views: [UIView]) { equalHeight(priority, views: views) equalWidth(priority, views: views) } //-- static func equalHeight(_ priority: UILayoutPriority = UILayoutPriority.required, views: UIView...) { equalHeight(priority, views: views) } static func equalHeight(_ priority: UILayoutPriority = UILayoutPriority.required, views: [UIView]) { guard views.count > 1 else { return } var lastView = views[0] views.forEach { let current = $0 let c = NSLayoutConstraint(item: lastView, attribute: .height, relatedBy: .equal, toItem: current, attribute: .height, multiplier: 1, constant: 0) c.priority = priority c.active() lastView = current } } //-- static func equalWidth(_ priority: UILayoutPriority = UILayoutPriority.required, views: UIView...) { equalWidth(priority, views: views) } static func equalWidth(_ priority: UILayoutPriority = UILayoutPriority.required, views: [UIView]) { guard views.count > 1 else { return } var lastView = views[0] views.forEach { let current = $0 let c = NSLayoutConstraint(item: lastView, attribute: .width, relatedBy: .equal, toItem: current, attribute: .width, multiplier: 1, constant: 0) c.priority = priority c.active() lastView = current } } @discardableResult static func equalWidth(_ priority: UILayoutPriority = UILayoutPriority.required, firstView: UIView, secondView: UIView, delta: CGFloat = 0, multipler: CGFloat = 1) -> NSLayoutConstraint { return NSLayoutConstraint(item: firstView, attribute: .width, relatedBy: .equal, toItem: secondView, attribute: .width, multiplier: multipler, constant: delta).active() } @discardableResult static func equalHeight(_ priority: UILayoutPriority = UILayoutPriority.required, firstView: UIView, secondView: UIView, delta: CGFloat = 0, multipler: CGFloat = 1) -> NSLayoutConstraint { return NSLayoutConstraint(item: firstView, attribute: .height, relatedBy: .equal, toItem: secondView, attribute: .height, multiplier: multipler, constant: delta).active() } // MARK: - -center static func alignCenter(_ firstView: UIView, secondView: UIView) { centerX(firstView, secondView: secondView) centerY(firstView, secondView: secondView) } @discardableResult static func centerX(_ firstView: UIView, secondView: UIView, constant: CGFloat = 0, multiplier: CGFloat = 1) -> NSLayoutConstraint { return NSLayoutConstraint(item: firstView, attribute: .centerX, relatedBy: .equal, toItem: secondView, attribute: .centerX, multiplier: multiplier, constant: constant).active() } @discardableResult static func centerY(_ firstView: UIView, secondView: UIView, constant: CGFloat = 0, multiplier: CGFloat = 1) -> NSLayoutConstraint { return NSLayoutConstraint(item: firstView, attribute: .centerY, relatedBy: .equal, toItem: secondView, attribute: .centerY, multiplier: multiplier, constant: constant).active() } // MARK: - -space @discardableResult static func verticalSpace(_ firstView: UIView, secondView: UIView, space: CGFloat = 0) -> NSLayoutConstraint { return NSLayoutConstraint(item: firstView, attribute: .bottom, relatedBy: .equal, toItem: secondView, attribute: .top, multiplier: 1, constant: space).active() } @discardableResult static func horizontalSpace(_ firstView: UIView, secondView: UIView, space: CGFloat = 0) -> NSLayoutConstraint { return NSLayoutConstraint(item: firstView, attribute: .trailing, relatedBy: .equal, toItem: secondView, attribute: .leading, multiplier: 1, constant: space).active() } // MARK: - -edge @discardableResult static func pinTop(_ firstView: UIView, secondView: UIView, space: CGFloat = 0, priority: UILayoutPriority = UILayoutPriority.required) -> NSLayoutConstraint { return NSLayoutConstraint(item: firstView, attribute: .top, relatedBy: .equal, toItem: secondView, attribute: .top, multiplier: 1, constant: space).active() } @discardableResult static func pinLeading(_ firstView: UIView, secondView: UIView, space: CGFloat = 0, priority: UILayoutPriority = UILayoutPriority.required) -> NSLayoutConstraint { return NSLayoutConstraint(item: firstView, attribute: .leading, relatedBy: .equal, toItem: secondView, attribute: .leading, multiplier: 1, constant: space).active() } @discardableResult static func pinBottom(_ firstView: UIView, secondView: UIView, space: CGFloat = 0, priority: UILayoutPriority = UILayoutPriority.required) -> NSLayoutConstraint { return NSLayoutConstraint(item: firstView, attribute: .bottom, relatedBy: .equal, toItem: secondView, attribute: .bottom, multiplier: 1, constant: space).active() } @discardableResult static func pinTrailing(_ firstView: UIView, secondView: UIView, space: CGFloat = 0, priority: UILayoutPriority = UILayoutPriority.required) -> NSLayoutConstraint { return NSLayoutConstraint(item: firstView, attribute: .trailing, relatedBy: .equal, toItem: secondView, attribute: .trailing, multiplier: 1, constant: space).active() } }