diff --git a/Documentation/Doc.playground/Pages/FormationLayout.xcplaygroundpage/Contents.swift b/Documentation/Doc.playground/Pages/FormationLayout.xcplaygroundpage/Contents.swift index d537320..4bd1c26 100644 --- a/Documentation/Doc.playground/Pages/FormationLayout.xcplaygroundpage/Contents.swift +++ b/Documentation/Doc.playground/Pages/FormationLayout.xcplaygroundpage/Contents.swift @@ -10,7 +10,7 @@ import FormationLayout `FormationLayout` is the top level layout class for one root view. - `FormationLayout` takes a `UIView` as its `rootView`. - - `translatesAutoresizingMaskIntoConstraints` of `rootView` is set to false by default but can also be true if set in constructor. + - `translatesAutoresizingMaskIntoConstraints` of `rootView` is not set to false by default but can be set in constructor. - `translatesAutoresizingMaskIntoConstraints` of subviews will be set to false automaticly. - Subviews with no `superView` will be added to `rootView` automaticly. */ diff --git a/Documentation/Doc.playground/Pages/Helpers.xcplaygroundpage/Contents.swift b/Documentation/Doc.playground/Pages/Helpers.xcplaygroundpage/Contents.swift index e96d51b..a5b69eb 100644 --- a/Documentation/Doc.playground/Pages/Helpers.xcplaygroundpage/Contents.swift +++ b/Documentation/Doc.playground/Pages/Helpers.xcplaygroundpage/Contents.swift @@ -7,15 +7,17 @@ import FormationLayout ## Helpers ---- + - aspectRatio: `width:height` - size: width & height - center: centerX & centerY */ -demo { canvas, icon1, icon2 in +demo { canvas, icon1, icon2, icon3 in let layout = FormationLayout(rootView: canvas) - layout[icon1].size(equalTo: 30).center(equalTo: canvas, multiplyBy: 0.8) - layout[icon2].size(equalTo: icon1, minus: 10).center(equalTo: icon1, plus: 30) + layout[icon1].aspectRatio(equalTo: 1.5).width(equalTo: 30) + layout[icon2].size(equalTo: 30).center(equalTo: canvas, multiplyBy: 0.8) + layout[icon3].size(equalTo: icon2, minus: 10).center(equalTo: icon2, plus: 30) } //: [Home](Home) | [Previous](@previous) | [Next](@next) diff --git a/Documentation/Doc.xcworkspace/contents.xcworkspacedata b/Documentation/Doc.xcworkspace/contents.xcworkspacedata index 77328c6..98859ab 100644 --- a/Documentation/Doc.xcworkspace/contents.xcworkspacedata +++ b/Documentation/Doc.xcworkspace/contents.xcworkspacedata @@ -4,6 +4,9 @@ + + diff --git a/Documentation/Images/Helpers.png b/Documentation/Images/Helpers.png index b94d9cd..ffcc2f5 100644 Binary files a/Documentation/Images/Helpers.png and b/Documentation/Images/Helpers.png differ diff --git a/README.md b/README.md index 9b740fd..b51ac89 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ `FormationLayout` is the top level layout class for one root view. - `FormationLayout` takes a `UIView` as its `rootView`. -- `translatesAutoresizingMaskIntoConstraints` of `rootView` is set to false by default but can also be true if set in constructor. +- `translatesAutoresizingMaskIntoConstraints` of `rootView` is not set to false by default but can be set in constructor. - `translatesAutoresizingMaskIntoConstraints` of subviews will be set to false automaticly. - Subviews with no `superView` will be added to `rootView` automaticly. @@ -50,14 +50,16 @@ demo { canvas, icon1, icon2, icon3 in ### Helpers +- aspectRatio: `width:height` - size: width & height - center: centerX & centerY ```swift -demo { canvas, icon1, icon2 in +demo { canvas, icon1, icon2, icon3 in let layout = FormationLayout(rootView: canvas) - layout[icon1].size(equalTo: 30).center(equalTo: canvas, multiplyBy: 0.8) - layout[icon2].size(equalTo: icon1, minus: 10).center(equalTo: icon1, plus: 30) + layout[icon1].aspectRatio(equalTo: 1.5).width(equalTo: 30) + layout[icon2].size(equalTo: 30).center(equalTo: canvas, multiplyBy: 0.8) + layout[icon3].size(equalTo: icon2, minus: 10).center(equalTo: icon2, plus: 30) } ``` diff --git a/Scripts/anchors.swift b/Scripts/anchors.swift index 2df3d46..67729fc 100644 --- a/Scripts/anchors.swift +++ b/Scripts/anchors.swift @@ -78,8 +78,8 @@ func main() { .map { seedCode.replacingOccurrences(of: seedAnchor, with: $0) } let equalsString = equals.joined(separator: "\n\n") - let relations = ["greaterThanOrEqualTo", "lessThanOrEqualTo"] - .map { equalsString.replacingOccurrences(of: "equalTo", with: $0) } + let relations = ["greaterThanOrEqual", "lessThanOrEqual"] + .map { equalsString.replacingOccurrences(of: "equalTo", with: "\($0)To").replacingOccurrences(of: ".equal", with: ".\($0)") } equals.insert("//== ↓ Generated by `swift Scripts/anchors.swift` ↓ ==", at: 1) let finalCode = header + (equals + relations).joined(separator: "\n\n") diff --git a/Scripts/helpers.swift b/Scripts/helpers.swift index efa847c..469d6f6 100644 --- a/Scripts/helpers.swift +++ b/Scripts/helpers.swift @@ -54,8 +54,8 @@ func main() { let header = match[1] let seedCode = match[2] - let relations = ["greaterThanOrEqualTo", "lessThanOrEqualTo"] - .map { seedCode.replacingOccurrences(of: "equalTo", with: $0) } + let relations = ["greaterThanOrEqual", "lessThanOrEqual"] + .map { seedCode.replacingOccurrences(of: "equalTo", with: "\($0)To").replacingOccurrences(of: ".equal", with: ".\($0)") } let finalCode = header + ([seedCode, "//== ↓ Generated by `swift Scripts/helpers.swift` ↓ =="] + relations).joined(separator: "\n\n") diff --git a/Sources/ConstraintMaker+Anchors.swift b/Sources/ConstraintMaker+Anchors.swift index 135372b..e85a3f4 100644 --- a/Sources/ConstraintMaker+Anchors.swift +++ b/Sources/ConstraintMaker+Anchors.swift @@ -423,7 +423,7 @@ extension ConstraintMaker { /// Make item.left greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func left(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .left, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .left, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.left greaterThanOrEqualTo item2.left * multiplier + constant @@ -435,7 +435,7 @@ extension ConstraintMaker { /// Make item.left greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func left(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .left, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .left, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.left greaterThanOrEqualTo item2.left * multiplier - constant @@ -451,7 +451,7 @@ extension ConstraintMaker { /// Make item.right greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func right(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .right, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .right, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.right greaterThanOrEqualTo item2.right * multiplier + constant @@ -463,7 +463,7 @@ extension ConstraintMaker { /// Make item.right greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func right(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .right, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .right, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.right greaterThanOrEqualTo item2.right * multiplier - constant @@ -479,7 +479,7 @@ extension ConstraintMaker { /// Make item.top greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func top(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .top, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .top, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.top greaterThanOrEqualTo item2.top * multiplier + constant @@ -491,7 +491,7 @@ extension ConstraintMaker { /// Make item.top greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func top(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .top, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .top, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.top greaterThanOrEqualTo item2.top * multiplier - constant @@ -507,7 +507,7 @@ extension ConstraintMaker { /// Make item.bottom greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func bottom(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .bottom, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .bottom, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.bottom greaterThanOrEqualTo item2.bottom * multiplier + constant @@ -519,7 +519,7 @@ extension ConstraintMaker { /// Make item.bottom greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func bottom(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .bottom, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .bottom, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.bottom greaterThanOrEqualTo item2.bottom * multiplier - constant @@ -535,7 +535,7 @@ extension ConstraintMaker { /// Make item.leading greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func leading(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .leading, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .leading, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.leading greaterThanOrEqualTo item2.leading * multiplier + constant @@ -547,7 +547,7 @@ extension ConstraintMaker { /// Make item.leading greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func leading(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .leading, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .leading, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.leading greaterThanOrEqualTo item2.leading * multiplier - constant @@ -563,7 +563,7 @@ extension ConstraintMaker { /// Make item.trailing greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func trailing(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .trailing, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .trailing, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.trailing greaterThanOrEqualTo item2.trailing * multiplier + constant @@ -575,7 +575,7 @@ extension ConstraintMaker { /// Make item.trailing greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func trailing(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .trailing, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .trailing, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.trailing greaterThanOrEqualTo item2.trailing * multiplier - constant @@ -591,7 +591,7 @@ extension ConstraintMaker { /// Make item.width greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func width(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .width, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .width, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.width greaterThanOrEqualTo item2.width * multiplier + constant @@ -603,7 +603,7 @@ extension ConstraintMaker { /// Make item.width greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func width(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .width, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .width, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.width greaterThanOrEqualTo item2.width * multiplier - constant @@ -619,7 +619,7 @@ extension ConstraintMaker { /// Make item.height greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func height(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .height, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .height, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.height greaterThanOrEqualTo item2.height * multiplier + constant @@ -631,7 +631,7 @@ extension ConstraintMaker { /// Make item.height greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func height(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .height, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .height, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.height greaterThanOrEqualTo item2.height * multiplier - constant @@ -647,7 +647,7 @@ extension ConstraintMaker { /// Make item.centerX greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func centerX(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerX, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .centerX, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.centerX greaterThanOrEqualTo item2.centerX * multiplier + constant @@ -659,7 +659,7 @@ extension ConstraintMaker { /// Make item.centerX greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func centerX(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerX, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .centerX, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.centerX greaterThanOrEqualTo item2.centerX * multiplier - constant @@ -675,7 +675,7 @@ extension ConstraintMaker { /// Make item.centerY greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func centerY(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerY, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .centerY, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.centerY greaterThanOrEqualTo item2.centerY * multiplier + constant @@ -687,7 +687,7 @@ extension ConstraintMaker { /// Make item.centerY greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func centerY(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerY, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .centerY, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.centerY greaterThanOrEqualTo item2.centerY * multiplier - constant @@ -703,7 +703,7 @@ extension ConstraintMaker { /// Make item.lastBaseline greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func lastBaseline(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .lastBaseline, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .lastBaseline, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.lastBaseline greaterThanOrEqualTo item2.lastBaseline * multiplier + constant @@ -715,7 +715,7 @@ extension ConstraintMaker { /// Make item.lastBaseline greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func lastBaseline(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .lastBaseline, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .lastBaseline, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.lastBaseline greaterThanOrEqualTo item2.lastBaseline * multiplier - constant @@ -731,7 +731,7 @@ extension ConstraintMaker { /// Make item.firstBaseline greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func firstBaseline(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .firstBaseline, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .firstBaseline, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.firstBaseline greaterThanOrEqualTo item2.firstBaseline * multiplier + constant @@ -743,7 +743,7 @@ extension ConstraintMaker { /// Make item.firstBaseline greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func firstBaseline(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .firstBaseline, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .firstBaseline, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.firstBaseline greaterThanOrEqualTo item2.firstBaseline * multiplier - constant @@ -759,7 +759,7 @@ extension ConstraintMaker { /// Make item.centerXWithinMargins greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func centerXWithinMargins(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerXWithinMargins, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .centerXWithinMargins, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.centerXWithinMargins greaterThanOrEqualTo item2.centerXWithinMargins * multiplier + constant @@ -771,7 +771,7 @@ extension ConstraintMaker { /// Make item.centerXWithinMargins greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func centerXWithinMargins(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerXWithinMargins, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .centerXWithinMargins, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.centerXWithinMargins greaterThanOrEqualTo item2.centerXWithinMargins * multiplier - constant @@ -787,7 +787,7 @@ extension ConstraintMaker { /// Make item.centerYWithinMargins greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func centerYWithinMargins(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerYWithinMargins, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .centerYWithinMargins, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.centerYWithinMargins greaterThanOrEqualTo item2.centerYWithinMargins * multiplier + constant @@ -799,7 +799,7 @@ extension ConstraintMaker { /// Make item.centerYWithinMargins greaterThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func centerYWithinMargins(greaterThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerYWithinMargins, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .centerYWithinMargins, relatedBy: .greaterThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.centerYWithinMargins greaterThanOrEqualTo item2.centerYWithinMargins * multiplier - constant @@ -815,7 +815,7 @@ extension ConstraintMaker { /// Make item.left lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func left(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .left, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .left, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.left lessThanOrEqualTo item2.left * multiplier + constant @@ -827,7 +827,7 @@ extension ConstraintMaker { /// Make item.left lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func left(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .left, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .left, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.left lessThanOrEqualTo item2.left * multiplier - constant @@ -843,7 +843,7 @@ extension ConstraintMaker { /// Make item.right lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func right(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .right, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .right, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.right lessThanOrEqualTo item2.right * multiplier + constant @@ -855,7 +855,7 @@ extension ConstraintMaker { /// Make item.right lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func right(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .right, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .right, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.right lessThanOrEqualTo item2.right * multiplier - constant @@ -871,7 +871,7 @@ extension ConstraintMaker { /// Make item.top lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func top(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .top, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .top, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.top lessThanOrEqualTo item2.top * multiplier + constant @@ -883,7 +883,7 @@ extension ConstraintMaker { /// Make item.top lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func top(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .top, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .top, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.top lessThanOrEqualTo item2.top * multiplier - constant @@ -899,7 +899,7 @@ extension ConstraintMaker { /// Make item.bottom lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func bottom(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .bottom, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .bottom, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.bottom lessThanOrEqualTo item2.bottom * multiplier + constant @@ -911,7 +911,7 @@ extension ConstraintMaker { /// Make item.bottom lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func bottom(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .bottom, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .bottom, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.bottom lessThanOrEqualTo item2.bottom * multiplier - constant @@ -927,7 +927,7 @@ extension ConstraintMaker { /// Make item.leading lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func leading(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .leading, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .leading, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.leading lessThanOrEqualTo item2.leading * multiplier + constant @@ -939,7 +939,7 @@ extension ConstraintMaker { /// Make item.leading lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func leading(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .leading, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .leading, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.leading lessThanOrEqualTo item2.leading * multiplier - constant @@ -955,7 +955,7 @@ extension ConstraintMaker { /// Make item.trailing lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func trailing(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .trailing, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .trailing, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.trailing lessThanOrEqualTo item2.trailing * multiplier + constant @@ -967,7 +967,7 @@ extension ConstraintMaker { /// Make item.trailing lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func trailing(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .trailing, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .trailing, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.trailing lessThanOrEqualTo item2.trailing * multiplier - constant @@ -983,7 +983,7 @@ extension ConstraintMaker { /// Make item.width lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func width(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .width, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .width, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.width lessThanOrEqualTo item2.width * multiplier + constant @@ -995,7 +995,7 @@ extension ConstraintMaker { /// Make item.width lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func width(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .width, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .width, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.width lessThanOrEqualTo item2.width * multiplier - constant @@ -1011,7 +1011,7 @@ extension ConstraintMaker { /// Make item.height lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func height(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .height, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .height, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.height lessThanOrEqualTo item2.height * multiplier + constant @@ -1023,7 +1023,7 @@ extension ConstraintMaker { /// Make item.height lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func height(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .height, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .height, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.height lessThanOrEqualTo item2.height * multiplier - constant @@ -1039,7 +1039,7 @@ extension ConstraintMaker { /// Make item.centerX lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func centerX(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerX, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .centerX, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.centerX lessThanOrEqualTo item2.centerX * multiplier + constant @@ -1051,7 +1051,7 @@ extension ConstraintMaker { /// Make item.centerX lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func centerX(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerX, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .centerX, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.centerX lessThanOrEqualTo item2.centerX * multiplier - constant @@ -1067,7 +1067,7 @@ extension ConstraintMaker { /// Make item.centerY lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func centerY(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerY, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .centerY, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.centerY lessThanOrEqualTo item2.centerY * multiplier + constant @@ -1079,7 +1079,7 @@ extension ConstraintMaker { /// Make item.centerY lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func centerY(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerY, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .centerY, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.centerY lessThanOrEqualTo item2.centerY * multiplier - constant @@ -1095,7 +1095,7 @@ extension ConstraintMaker { /// Make item.lastBaseline lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func lastBaseline(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .lastBaseline, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .lastBaseline, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.lastBaseline lessThanOrEqualTo item2.lastBaseline * multiplier + constant @@ -1107,7 +1107,7 @@ extension ConstraintMaker { /// Make item.lastBaseline lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func lastBaseline(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .lastBaseline, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .lastBaseline, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.lastBaseline lessThanOrEqualTo item2.lastBaseline * multiplier - constant @@ -1123,7 +1123,7 @@ extension ConstraintMaker { /// Make item.firstBaseline lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func firstBaseline(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .firstBaseline, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .firstBaseline, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.firstBaseline lessThanOrEqualTo item2.firstBaseline * multiplier + constant @@ -1135,7 +1135,7 @@ extension ConstraintMaker { /// Make item.firstBaseline lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func firstBaseline(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .firstBaseline, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .firstBaseline, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.firstBaseline lessThanOrEqualTo item2.firstBaseline * multiplier - constant @@ -1151,7 +1151,7 @@ extension ConstraintMaker { /// Make item.centerXWithinMargins lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func centerXWithinMargins(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerXWithinMargins, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .centerXWithinMargins, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.centerXWithinMargins lessThanOrEqualTo item2.centerXWithinMargins * multiplier + constant @@ -1163,7 +1163,7 @@ extension ConstraintMaker { /// Make item.centerXWithinMargins lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func centerXWithinMargins(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerXWithinMargins, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .centerXWithinMargins, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.centerXWithinMargins lessThanOrEqualTo item2.centerXWithinMargins * multiplier - constant @@ -1179,7 +1179,7 @@ extension ConstraintMaker { /// Make item.centerYWithinMargins lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult public func centerYWithinMargins(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, plus constant: CGFloat = 0, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerYWithinMargins, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) + return makeConstraint(attribute: .centerYWithinMargins, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: constant, priority: priority) } /// Make item.centerYWithinMargins lessThanOrEqualTo item2.centerYWithinMargins * multiplier + constant @@ -1191,7 +1191,7 @@ extension ConstraintMaker { /// Make item.centerYWithinMargins lessThanOrEqualTo item2.attribute * multiplier - constant @discardableResult public func centerYWithinMargins(lessThanOrEqualTo attribute: NSLayoutAttribute, of item2: Item, multiplyBy multiplier: CGFloat = 1, minus constant: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .centerYWithinMargins, relatedBy: .equal, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) + return makeConstraint(attribute: .centerYWithinMargins, relatedBy: .lessThanOrEqual, toItem: item2, attribute: attribute, multiplier: multiplier, constant: -constant, priority: priority) } /// Make item.centerYWithinMargins lessThanOrEqualTo item2.centerYWithinMargins * multiplier - constant diff --git a/Sources/ConstraintMaker+Helpers.swift b/Sources/ConstraintMaker+Helpers.swift index 342de8a..13dea32 100644 --- a/Sources/ConstraintMaker+Helpers.swift +++ b/Sources/ConstraintMaker+Helpers.swift @@ -26,6 +26,10 @@ import UIKit extension ConstraintMaker { + //-------------------------------------- + // MARK: size + //-------------------------------------- + /// Make item.with equalTo one value @discardableResult public func width(equalTo value: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { @@ -78,6 +82,9 @@ extension ConstraintMaker { .height(equalTo: .height, of: item2, multiplyBy: multiplier, minus: constant, at: priority) } + //-------------------------------------- + // MARK: center + //-------------------------------------- /// Make center (centerX & centerY) equalTo item2.attribute * multiplier + constant @discardableResult @@ -107,22 +114,42 @@ extension ConstraintMaker { .centerY(equalTo: .centerY, of: item2, multiplyBy: multiplier, minus: constant, at: priority) } + //-------------------------------------- + // MARK: aspectRatio + //-------------------------------------- + + /// Make aspect ratio (width:height) equalTo value + @discardableResult + public func aspectRatio(equalTo value: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { + return makeConstraintToItem(attribute: .width, relatedBy: .equal, toAttribute: .height, multiplier: value, constant: 0, priority: priority) + } + + /// Make aspect ratio (width:height) equalTo size.width:size.height + @discardableResult + public func aspectRatio(equalTo size: CGSize, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { + return aspectRatio(equalTo: size.width / size.height, at: priority) + } + } //== ↓ Generated by `swift Scripts/helpers.swift` ↓ == extension ConstraintMaker { + //-------------------------------------- + // MARK: size + //-------------------------------------- + /// Make item.with greaterThanOrEqualTo one value @discardableResult public func width(greaterThanOrEqualTo value: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .width, relatedBy: .equal, constant: value, priority: priority) + return makeConstraint(attribute: .width, relatedBy: .greaterThanOrEqual, constant: value, priority: priority) } /// Make item.height greaterThanOrEqualTo one value @discardableResult public func height(greaterThanOrEqualTo value: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .height, relatedBy: .equal, constant: value, priority: priority) + return makeConstraint(attribute: .height, relatedBy: .greaterThanOrEqual, constant: value, priority: priority) } /// Make item.size (with & height) greaterThanOrEqualTo one value @@ -165,6 +192,9 @@ extension ConstraintMaker { .height(greaterThanOrEqualTo: .height, of: item2, multiplyBy: multiplier, minus: constant, at: priority) } + //-------------------------------------- + // MARK: center + //-------------------------------------- /// Make center (centerX & centerY) greaterThanOrEqualTo item2.attribute * multiplier + constant @discardableResult @@ -194,20 +224,40 @@ extension ConstraintMaker { .centerY(greaterThanOrEqualTo: .centerY, of: item2, multiplyBy: multiplier, minus: constant, at: priority) } + //-------------------------------------- + // MARK: aspectRatio + //-------------------------------------- + + /// Make aspect ratio (width:height) greaterThanOrEqualTo value + @discardableResult + public func aspectRatio(greaterThanOrEqualTo value: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { + return makeConstraintToItem(attribute: .width, relatedBy: .greaterThanOrEqual, toAttribute: .height, multiplier: value, constant: 0, priority: priority) + } + + /// Make aspect ratio (width:height) greaterThanOrEqualTo size.width:size.height + @discardableResult + public func aspectRatio(greaterThanOrEqualTo size: CGSize, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { + return aspectRatio(greaterThanOrEqualTo: size.width / size.height, at: priority) + } + } extension ConstraintMaker { + //-------------------------------------- + // MARK: size + //-------------------------------------- + /// Make item.with lessThanOrEqualTo one value @discardableResult public func width(lessThanOrEqualTo value: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .width, relatedBy: .equal, constant: value, priority: priority) + return makeConstraint(attribute: .width, relatedBy: .lessThanOrEqual, constant: value, priority: priority) } /// Make item.height lessThanOrEqualTo one value @discardableResult public func height(lessThanOrEqualTo value: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { - return makeConstraint(attribute: .height, relatedBy: .equal, constant: value, priority: priority) + return makeConstraint(attribute: .height, relatedBy: .lessThanOrEqual, constant: value, priority: priority) } /// Make item.size (with & height) lessThanOrEqualTo one value @@ -250,6 +300,9 @@ extension ConstraintMaker { .height(lessThanOrEqualTo: .height, of: item2, multiplyBy: multiplier, minus: constant, at: priority) } + //-------------------------------------- + // MARK: center + //-------------------------------------- /// Make center (centerX & centerY) lessThanOrEqualTo item2.attribute * multiplier + constant @discardableResult @@ -279,4 +332,20 @@ extension ConstraintMaker { .centerY(lessThanOrEqualTo: .centerY, of: item2, multiplyBy: multiplier, minus: constant, at: priority) } + //-------------------------------------- + // MARK: aspectRatio + //-------------------------------------- + + /// Make aspect ratio (width:height) lessThanOrEqualTo value + @discardableResult + public func aspectRatio(lessThanOrEqualTo value: CGFloat, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { + return makeConstraintToItem(attribute: .width, relatedBy: .lessThanOrEqual, toAttribute: .height, multiplier: value, constant: 0, priority: priority) + } + + /// Make aspect ratio (width:height) lessThanOrEqualTo size.width:size.height + @discardableResult + public func aspectRatio(lessThanOrEqualTo size: CGSize, at priority: UILayoutPriority = UILayoutPriorityRequired) -> Self { + return aspectRatio(lessThanOrEqualTo: size.width / size.height, at: priority) + } + } \ No newline at end of file diff --git a/Sources/ConstraintMaker.swift b/Sources/ConstraintMaker.swift index 602c6f4..da8b0c7 100644 --- a/Sources/ConstraintMaker.swift +++ b/Sources/ConstraintMaker.swift @@ -29,6 +29,9 @@ public protocol ConstraintMaker { @discardableResult func makeConstraint(attribute: NSLayoutAttribute, relatedBy relation: NSLayoutRelation, toItem item2: Any?, attribute attr2: NSLayoutAttribute, multiplier: CGFloat, constant c: CGFloat, priority: UILayoutPriority) -> Self + @discardableResult + func makeConstraintToItem(attribute: NSLayoutAttribute, relatedBy relation: NSLayoutRelation, toAttribute attr2: NSLayoutAttribute, multiplier: CGFloat, constant c: CGFloat, priority: UILayoutPriority) -> Self + } extension ConstraintMaker { diff --git a/Sources/GroupConstraintMaker.swift b/Sources/GroupConstraintMaker.swift index 76eb722..ea78592 100644 --- a/Sources/GroupConstraintMaker.swift +++ b/Sources/GroupConstraintMaker.swift @@ -31,6 +31,7 @@ public final class GroupConstraintMaker: ConstraintMaker { self.items = items } + @discardableResult public func makeConstraint(attribute: NSLayoutAttribute, relatedBy relation: NSLayoutRelation, toItem item2: Any?, attribute attr2: NSLayoutAttribute, multiplier: CGFloat, constant c: CGFloat, priority: UILayoutPriority) -> Self { for item in items { item.makeConstraint(attribute: attribute, relatedBy: relation, toItem: item2, attribute: attr2, multiplier: multiplier, constant: c, priority: priority) @@ -38,6 +39,14 @@ public final class GroupConstraintMaker: ConstraintMaker { return self } + @discardableResult + public func makeConstraintToItem(attribute: NSLayoutAttribute, relatedBy relation: NSLayoutRelation, toAttribute attr2: NSLayoutAttribute, multiplier: CGFloat, constant c: CGFloat, priority: UILayoutPriority) -> Self { + for item in items { + item.makeConstraint(attribute: attribute, relatedBy: relation, toItem: item, attribute: attr2, multiplier: multiplier, constant: c, priority: priority) + } + return self + } + } extension LayoutManager { diff --git a/Sources/ItemConstraintMaker.swift b/Sources/ItemConstraintMaker.swift index 3727bd1..9750ac6 100644 --- a/Sources/ItemConstraintMaker.swift +++ b/Sources/ItemConstraintMaker.swift @@ -54,4 +54,9 @@ public final class ItemConstraintMaker: ConstraintMaker { return self } + @discardableResult + public func makeConstraintToItem(attribute: NSLayoutAttribute, relatedBy relation: NSLayoutRelation, toAttribute attr2: NSLayoutAttribute, multiplier: CGFloat, constant c: CGFloat, priority: UILayoutPriority) -> Self { + return makeConstraint(attribute: attribute, relatedBy: relation, toItem: item, attribute: attr2, multiplier: multiplier, constant: c, priority: priority) + } + }