0001 // 0002 // SnapKit 0003 // 0004 // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit 0005 // 0006 // Permission is hereby granted, free of charge, to any person obtaining a copy 0007 // of this software and associated documentation files (the "Software"), to deal 0008 // in the Software without restriction, including without limitation the rights 0009 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 0010 // copies of the Software, and to permit persons to whom the Software is 0011 // furnished to do so, subject to the following conditions: 0012 // 0013 // The above copyright notice and this permission notice shall be included in 0014 // all copies or substantial portions of the Software. 0015 // 0016 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 0017 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 0018 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 0019 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 0020 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 0021 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 0022 // THE SOFTWARE. 0023 0024 #if os(iOS) || os(tvOS) 0025 import UIKit 0026 #else 0027 import AppKit 0028 #endif 0029 0030 /** 0031 Used to make constraints 0032 */ 0033 public class ConstraintMaker{ 0034 0035 /// left edge 0036 public var left: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Left) } 0037 0038 /// top edge 0039 public var top: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Top) } 0040 0041 /// right edge 0042 public var right: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Right) } 0043 0044 /// bottom edge 0045 public var bottom: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Bottom) } 0046 0047 /// leading edge 0048 public var leading: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Leading) } 0049 0050 /// trailing edge 0051 public var trailing: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Trailing) } 0052 0053 /// width dimension 0054 public var width: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Width) } 0055 0056 /// height dimension 0057 public var height: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Height) } 0058 0059 /// centerX dimension 0060 public var centerX: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterX) } 0061 0062 /// centerY dimension 0063 public var centerY: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterY) } 0064 0065 /// baseline position 0066 public var baseline: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Baseline) } 0067 0068 /// firse baseline position 0069 @available(iOS 8.0, *) 0070 public var firstBaseline: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.FirstBaseline) } 0071 0072 /// left margin 0073 @available(iOS 8.0, *) 0074 public var leftMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.LeftMargin) } 0075 0076 /// right margin 0077 @available(iOS 8.0, *) 0078 public var rightMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.RightMargin) } 0079 0080 /// top margin 0081 @available(iOS 8.0, *) 0082 public var topMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.TopMargin) } 0083 0084 /// bottom margin 0085 @available(iOS 8.0, *) 0086 public var bottomMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.BottomMargin) } 0087 0088 /// leading margin 0089 @available(iOS 8.0, *) 0090 public var leadingMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.LeadingMargin) } 0091 0092 /// trailing margin 0093 @available(iOS 8.0, *) 0094 public var trailingMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.TrailingMargin) } 0095 0096 /// centerX within margins 0097 @available(iOS 8.0, *) 0098 public var centerXWithinMargins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterXWithinMargins) } 0099 0100 /// centerY within margins 0101 @available(iOS 8.0, *) 0102 public var centerYWithinMargins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterYWithinMargins) } 0103 0104 /// top + left + bottom + right edges 0105 public var edges: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Edges) } 0106 0107 /// width + height dimensions 0108 public var size: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Size) } 0109 0110 // centerX + centerY positions 0111 public var center: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Center) } 0112 0113 // top + left + bottom + right margins 0114 @available(iOS 8.0, *) 0115 public var margins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Margins) } 0116 0117 // centerX + centerY within margins 0118 @available(iOS 8.0, *) 0119 public var centerWithinMargins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterWithinMargins) } 0120 0121 internal init
ConstraintMaker.swift:139 internal class func prepareConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] {ConstraintMaker.swift:140 let maker = ConstraintMaker(view: view, file: file, line: line)ConstraintMaker.swift:151 internal class func makeConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) {ConstraintMaker.swift:153 let maker = ConstraintMaker(view: view, file: file, line: line)ConstraintMaker.swift:164 internal class func remakeConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) {ConstraintMaker.swift:166 let maker = ConstraintMaker(view: view, file: file, line: line)ConstraintMaker.swift:178 internal class func updateConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) {ConstraintMaker.swift:180 let maker = ConstraintMaker(view: view, file: file, line: line)View+SnapKit.swift:130 public func snp_prepareConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] {View+SnapKit.swift:131 return ConstraintMaker.prepareConstraints(view: self, file: file, line: line, closure: closure)View+SnapKit.swift:139 public func snp_makeConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> Void {View+SnapKit.swift:140 ConstraintMaker.makeConstraints(view: self, file: file, line: line, closure: closure)View+SnapKit.swift:150 public func snp_updateConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> Void {View+SnapKit.swift:151 ConstraintMaker.updateConstraints(view: self, file: file, line: line, closure: closure)View+SnapKit.swift:159 public func snp_remakeConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> Void {View+SnapKit.swift:160 ConstraintMaker.remakeConstraints(view: self, file: file, line: line, closure: closure)View+SnapKit.swift:167 ConstraintMaker.removeConstraints(view: self)(view: View, file: String, line: UInt) { 0122 self.view = view 0123 self.file = file 0124 self.line = line 0125 } 0126 0127 internal let file
ConstraintMaker.swift:140 let maker = ConstraintMaker(view: view, file: file, line: line)ConstraintMaker.swift:153 let maker = ConstraintMaker(view: view, file: file, line: line)ConstraintMaker.swift:166 let maker = ConstraintMaker(view: view, file: file, line: line)ConstraintMaker.swift:180 let maker = ConstraintMaker(view: view, file: file, line: line): String 0128 internal let line
ConstraintMaker.swift:123 self.file = fileConstraintMaker.swift:145 constraint.makerFile = maker.fileConstraintMaker.swift:158 constraint.makerFile = maker.fileConstraintMaker.swift:172 constraint.makerFile = maker.fileConstraintMaker.swift:185 constraint.makerFile = maker.file: UInt 0129 internal let view
ConstraintMaker.swift:124 self.line = lineConstraintMaker.swift:146 constraint.makerLine = maker.lineConstraintMaker.swift:159 constraint.makerLine = maker.lineConstraintMaker.swift:173 constraint.makerLine = maker.lineConstraintMaker.swift:186 constraint.makerLine = maker.line: View 0130 internal var constraintDescriptions
ConstraintMaker.swift:122 self.view = viewConstraintMaker.swift:133 let item = ConstraintItem(object: self.view, attributes: attributes)= [ConstraintDescription]() 0131 0132 internal func makeConstraintDescription
ConstraintMaker.swift:135 self.constraintDescriptions.append(constraintDescription)ConstraintMaker.swift:143 let constraints = maker.constraintDescriptions.map { $0.constraint }ConstraintMaker.swift:156 let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint }ConstraintMaker.swift:170 let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint }ConstraintMaker.swift:183 let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint}(attributes: ConstraintAttributes) -> ConstraintDescription { 0133 let item = ConstraintItem(object: self.view, attributes: attributes) 0134 let constraintDescription = ConstraintDescription(fromItem: item) 0135 self.constraintDescriptions.append(constraintDescription) 0136 return constraintDescription 0137 } 0138 0139 internal class func prepareConstraints
ConstraintMaker.swift:36 public var left: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Left) }ConstraintMaker.swift:39 public var top: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Top) }ConstraintMaker.swift:42 public var right: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Right) }ConstraintMaker.swift:45 public var bottom: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Bottom) }ConstraintMaker.swift:48 public var leading: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Leading) }ConstraintMaker.swift:51 public var trailing: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Trailing) }ConstraintMaker.swift:54 public var width: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Width) }ConstraintMaker.swift:57 public var height: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Height) }ConstraintMaker.swift:60 public var centerX: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterX) }ConstraintMaker.swift:63 public var centerY: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterY) }ConstraintMaker.swift:66 public var baseline: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Baseline) }ConstraintMaker.swift:70 public var firstBaseline: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.FirstBaseline) }ConstraintMaker.swift:74 public var leftMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.LeftMargin) }ConstraintMaker.swift:78 public var rightMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.RightMargin) }ConstraintMaker.swift:82 public var topMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.TopMargin) }ConstraintMaker.swift:86 public var bottomMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.BottomMargin) }ConstraintMaker.swift:90 public var leadingMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.LeadingMargin) }ConstraintMaker.swift:94 public var trailingMargin: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.TrailingMargin) }ConstraintMaker.swift:98 public var centerXWithinMargins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterXWithinMargins) }ConstraintMaker.swift:102 public var centerYWithinMargins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterYWithinMargins) }ConstraintMaker.swift:105 public var edges: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Edges) }ConstraintMaker.swift:108 public var size: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Size) }ConstraintMaker.swift:111 public var center: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Center) }ConstraintMaker.swift:115 public var margins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.Margins) }ConstraintMaker.swift:119 public var centerWithinMargins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterWithinMargins) }(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] { 0140 let maker = ConstraintMaker(view: view, file: file, line: line) 0141 closure(make: maker) 0142 0143 let constraints = maker.constraintDescriptions.map { $0.constraint } 0144 for constraint in constraints { 0145 constraint.makerFile = maker.file 0146 constraint.makerLine = maker.line 0147 } 0148 return constraints 0149 } 0150 0151 internal class func makeConstraints
View+SnapKit.swift:131 return ConstraintMaker.prepareConstraints(view: self, file: file, line: line, closure: closure)(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) { 0152 view.translatesAutoresizingMaskIntoConstraints = false 0153 let maker = ConstraintMaker(view: view, file: file, line: line) 0154 closure(make: maker) 0155 0156 let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint } 0157 for constraint in constraints { 0158 constraint.makerFile = maker.file 0159 constraint.makerLine = maker.line 0160 constraint.installOnView(updateExisting: false) 0161 } 0162 } 0163 0164 internal class func remakeConstraints
View+SnapKit.swift:140 ConstraintMaker.makeConstraints(view: self, file: file, line: line, closure: closure)(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) { 0165 view.translatesAutoresizingMaskIntoConstraints = false 0166 let maker = ConstraintMaker(view: view, file: file, line: line) 0167 closure(make: maker) 0168 0169 self.removeConstraints(view: view) 0170 let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint } 0171 for constraint in constraints { 0172 constraint.makerFile = maker.file 0173 constraint.makerLine = maker.line 0174 constraint.installOnView(updateExisting: false) 0175 } 0176 } 0177 0178 internal class func updateConstraints
View+SnapKit.swift:160 ConstraintMaker.remakeConstraints(view: self, file: file, line: line, closure: closure)(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) { 0179 view.translatesAutoresizingMaskIntoConstraints = false 0180 let maker = ConstraintMaker(view: view, file: file, line: line) 0181 closure(make: maker) 0182 0183 let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint} 0184 for constraint in constraints { 0185 constraint.makerFile = maker.file 0186 constraint.makerLine = maker.line 0187 constraint.installOnView(updateExisting: true) 0188 } 0189 } 0190 0191 internal class func removeConstraints
View+SnapKit.swift:151 ConstraintMaker.updateConstraints(view: self, file: file, line: line, closure: closure)(view view: View) { 0192 for existingLayoutConstraint in view.snp_installedLayoutConstraints { 0193 existingLayoutConstraint.snp_constraint?.uninstall() 0194 } 0195 } 0196 } 0197
ConstraintMaker.swift:169 self.removeConstraints(view: view)View+SnapKit.swift:167 ConstraintMaker.removeConstraints(view: self)