From 8a786441f9d75a033e9d42c953d55dd77af9da74 Mon Sep 17 00:00:00 2001 From: Roman Podymov Date: Mon, 25 Dec 2023 12:29:05 +0100 Subject: [PATCH 1/5] safeAreaLayoutGuide --- .../ConstraintMakerRelatable+Extensions.swift | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/Sources/ConstraintMakerRelatable+Extensions.swift b/Sources/ConstraintMakerRelatable+Extensions.swift index bfde2725..35bd2302 100644 --- a/Sources/ConstraintMakerRelatable+Extensions.swift +++ b/Sources/ConstraintMakerRelatable+Extensions.swift @@ -53,5 +53,31 @@ extension ConstraintMakerRelatable { } return self.relatedTo(closure(other), relation: .greaterThanOrEqual, file: file, line: line) } - + + @available(iOS 11.0, *) + @discardableResult + public func equalToSuperviewSafeAreaLayoutGuide(_ closure: (ConstraintLayoutGuide) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { + guard let other = self.description.item.superview?.safeAreaLayoutGuide else { + fatalError("Expected superview but found nil when attempting make constraint `equalToSuperviewSafeAreaLayoutGuide`.") + } + return self.relatedTo(closure(other), relation: .equal, file: file, line: line) + } + + @available(iOS 11.0, *) + @discardableResult + public func lessThanOrEqualToSuperviewSafeAreaLayoutGuide(_ closure: (ConstraintLayoutGuide) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { + guard let other = self.description.item.superview?.safeAreaLayoutGuide else { + fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperviewSafeAreaLayoutGuide`.") + } + return self.relatedTo(closure(other), relation: .lessThanOrEqual, file: file, line: line) + } + + @available(iOS 11.0, *) + @discardableResult + public func greaterThanOrEqualToSuperviewSafeAreaLayoutGuide(_ closure: (ConstraintLayoutGuide) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { + guard let other = self.description.item.superview?.safeAreaLayoutGuide else { + fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperviewSafeAreaLayoutGuide`.") + } + return self.relatedTo(closure(other), relation: .greaterThanOrEqual, file: file, line: line) + } } From 17c839210841b8127bc147ccc8ac7c3e7c676114 Mon Sep 17 00:00:00 2001 From: Roman Podymov Date: Mon, 25 Dec 2023 12:33:03 +0100 Subject: [PATCH 2/5] macOS 11.0 --- Sources/ConstraintMakerRelatable+Extensions.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/ConstraintMakerRelatable+Extensions.swift b/Sources/ConstraintMakerRelatable+Extensions.swift index 35bd2302..f58bfaee 100644 --- a/Sources/ConstraintMakerRelatable+Extensions.swift +++ b/Sources/ConstraintMakerRelatable+Extensions.swift @@ -54,7 +54,7 @@ extension ConstraintMakerRelatable { return self.relatedTo(closure(other), relation: .greaterThanOrEqual, file: file, line: line) } - @available(iOS 11.0, *) + @available(iOS 11.0, macOS 11.0, *) @discardableResult public func equalToSuperviewSafeAreaLayoutGuide(_ closure: (ConstraintLayoutGuide) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { guard let other = self.description.item.superview?.safeAreaLayoutGuide else { @@ -63,7 +63,7 @@ extension ConstraintMakerRelatable { return self.relatedTo(closure(other), relation: .equal, file: file, line: line) } - @available(iOS 11.0, *) + @available(iOS 11.0, macOS 11.0, *) @discardableResult public func lessThanOrEqualToSuperviewSafeAreaLayoutGuide(_ closure: (ConstraintLayoutGuide) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { guard let other = self.description.item.superview?.safeAreaLayoutGuide else { @@ -72,7 +72,7 @@ extension ConstraintMakerRelatable { return self.relatedTo(closure(other), relation: .lessThanOrEqual, file: file, line: line) } - @available(iOS 11.0, *) + @available(iOS 11.0, macOS 11.0, *) @discardableResult public func greaterThanOrEqualToSuperviewSafeAreaLayoutGuide(_ closure: (ConstraintLayoutGuide) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { guard let other = self.description.item.superview?.safeAreaLayoutGuide else { From fc29ffd136858b69341f27fd86e21c7f8e7c9f6e Mon Sep 17 00:00:00 2001 From: Roman Podymov Date: Mon, 25 Dec 2023 12:50:40 +0100 Subject: [PATCH 3/5] Moved to other place --- .../ConstraintMakerRelatable+Extensions.swift | 27 ---------------- Sources/ConstraintMakerRelatable.swift | 31 +++++++++++++++++-- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Sources/ConstraintMakerRelatable+Extensions.swift b/Sources/ConstraintMakerRelatable+Extensions.swift index f58bfaee..7fee99fa 100644 --- a/Sources/ConstraintMakerRelatable+Extensions.swift +++ b/Sources/ConstraintMakerRelatable+Extensions.swift @@ -53,31 +53,4 @@ extension ConstraintMakerRelatable { } return self.relatedTo(closure(other), relation: .greaterThanOrEqual, file: file, line: line) } - - @available(iOS 11.0, macOS 11.0, *) - @discardableResult - public func equalToSuperviewSafeAreaLayoutGuide(_ closure: (ConstraintLayoutGuide) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview?.safeAreaLayoutGuide else { - fatalError("Expected superview but found nil when attempting make constraint `equalToSuperviewSafeAreaLayoutGuide`.") - } - return self.relatedTo(closure(other), relation: .equal, file: file, line: line) - } - - @available(iOS 11.0, macOS 11.0, *) - @discardableResult - public func lessThanOrEqualToSuperviewSafeAreaLayoutGuide(_ closure: (ConstraintLayoutGuide) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview?.safeAreaLayoutGuide else { - fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperviewSafeAreaLayoutGuide`.") - } - return self.relatedTo(closure(other), relation: .lessThanOrEqual, file: file, line: line) - } - - @available(iOS 11.0, macOS 11.0, *) - @discardableResult - public func greaterThanOrEqualToSuperviewSafeAreaLayoutGuide(_ closure: (ConstraintLayoutGuide) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview?.safeAreaLayoutGuide else { - fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperviewSafeAreaLayoutGuide`.") - } - return self.relatedTo(closure(other), relation: .greaterThanOrEqual, file: file, line: line) - } } diff --git a/Sources/ConstraintMakerRelatable.swift b/Sources/ConstraintMakerRelatable.swift index 0a3d5ee2..86078312 100644 --- a/Sources/ConstraintMakerRelatable.swift +++ b/Sources/ConstraintMakerRelatable.swift @@ -86,7 +86,16 @@ public class ConstraintMakerRelatable { } return self.relatedTo(other, relation: .equal, file: file, line: line) } - + + @available(iOS 11.0, tvOS 11.0, macOS 11.00, *) + @discardableResult + public func equalToSuperviewSafeAreaLayoutGuide(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { + guard let other = self.description.item.superview?.safeAreaLayoutGuide else { + fatalError("Expected superview but found nil when attempting make constraint `equalToSuperviewSafeAreaLayoutGuide`.") + } + return self.relatedTo(other, relation: .equal, file: file, line: line) + } + @discardableResult public func lessThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) @@ -99,7 +108,16 @@ public class ConstraintMakerRelatable { } return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) } - + + @available(iOS 11.0, tvOS 11.0, macOS 11.00, *) + @discardableResult + public func lessThanOrEqualToSuperviewSafeAreaLayoutGuide(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { + guard let other = self.description.item.superview?.safeAreaLayoutGuide else { + fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperviewSafeAreaLayoutGuide`.") + } + return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) + } + @discardableResult public func greaterThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) @@ -112,4 +130,13 @@ public class ConstraintMakerRelatable { } return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) } + + @available(iOS 11.0, tvOS 11.0, macOS 11.00, *) + @discardableResult + public func greaterThanOrEqualToSuperviewSafeAreaLayoutGuide(_ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { + guard let other = self.description.item.superview?.safeAreaLayoutGuide else { + fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperviewSafeAreaLayoutGuide`.") + } + return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) + } } From 7dd6b3269c3729468bdc06a9bd6d71c3b0de7e23 Mon Sep 17 00:00:00 2001 From: Roman Podymov Date: Mon, 25 Dec 2023 12:58:07 +0100 Subject: [PATCH 4/5] Reset --- Sources/ConstraintMakerRelatable+Extensions.swift | 1 + Sources/ConstraintMakerRelatable.swift | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Sources/ConstraintMakerRelatable+Extensions.swift b/Sources/ConstraintMakerRelatable+Extensions.swift index 7fee99fa..bfde2725 100644 --- a/Sources/ConstraintMakerRelatable+Extensions.swift +++ b/Sources/ConstraintMakerRelatable+Extensions.swift @@ -53,4 +53,5 @@ extension ConstraintMakerRelatable { } return self.relatedTo(closure(other), relation: .greaterThanOrEqual, file: file, line: line) } + } diff --git a/Sources/ConstraintMakerRelatable.swift b/Sources/ConstraintMakerRelatable.swift index 86078312..d9323e16 100644 --- a/Sources/ConstraintMakerRelatable.swift +++ b/Sources/ConstraintMakerRelatable.swift @@ -87,7 +87,7 @@ public class ConstraintMakerRelatable { return self.relatedTo(other, relation: .equal, file: file, line: line) } - @available(iOS 11.0, tvOS 11.0, macOS 11.00, *) + @available(iOS 11.0, tvOS 11.0, macOS 11.0, *) @discardableResult public func equalToSuperviewSafeAreaLayoutGuide(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { guard let other = self.description.item.superview?.safeAreaLayoutGuide else { @@ -109,7 +109,7 @@ public class ConstraintMakerRelatable { return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) } - @available(iOS 11.0, tvOS 11.0, macOS 11.00, *) + @available(iOS 11.0, tvOS 11.0, macOS 11.0, *) @discardableResult public func lessThanOrEqualToSuperviewSafeAreaLayoutGuide(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { guard let other = self.description.item.superview?.safeAreaLayoutGuide else { @@ -131,7 +131,7 @@ public class ConstraintMakerRelatable { return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) } - @available(iOS 11.0, tvOS 11.0, macOS 11.00, *) + @available(iOS 11.0, tvOS 11.0, macOS 11.0, *) @discardableResult public func greaterThanOrEqualToSuperviewSafeAreaLayoutGuide(_ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { guard let other = self.description.item.superview?.safeAreaLayoutGuide else { From eadab7e5e4193608e6ed6635f17a7a27c17628f4 Mon Sep 17 00:00:00 2001 From: Roman Podymov Date: Mon, 25 Dec 2023 20:40:52 +0100 Subject: [PATCH 5/5] Tests --- Tests/SnapKitTests/Tests.swift | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Tests/SnapKitTests/Tests.swift b/Tests/SnapKitTests/Tests.swift index 99ec6338..325f3bff 100644 --- a/Tests/SnapKitTests/Tests.swift +++ b/Tests/SnapKitTests/Tests.swift @@ -768,4 +768,38 @@ class SnapKitTests: XCTestCase { let higherPriority: ConstraintPriority = ConstraintPriority.high.advanced(by: 1) XCTAssertEqual(higherPriority.value, highPriority.value + 1) } + + @available(iOS 11.0, tvOS 11.0, macOS 11.0, *) + func testSafeAreaLayoutGuide() { + let v1 = View() + self.container.addSubview(v1) + + v1.snp.makeConstraints { make in + make.verticalEdges.equalToSuperviewSafeAreaLayoutGuide() + make.leading.lessThanOrEqualToSuperviewSafeAreaLayoutGuide() + make.trailing.greaterThanOrEqualToSuperviewSafeAreaLayoutGuide() + } + + XCTAssertEqual(container.snp_constraints.count, 4, "Should have 4 constraints installed") + XCTAssertNotNil(container.constraints.first { + $0.firstAttribute == .leading && + $0.secondAttribute == .leading && + $0.relation == .lessThanOrEqual + }) + XCTAssertNotNil(container.constraints.first { + $0.firstAttribute == .trailing && + $0.secondAttribute == .trailing && + $0.relation == .greaterThanOrEqual + }) + XCTAssertNotNil(container.constraints.first { + $0.firstAttribute == .top && + $0.secondAttribute == .top && + $0.relation == .equal + }) + XCTAssertNotNil(container.constraints.first { + $0.firstAttribute == .bottom && + $0.secondAttribute == .bottom && + $0.relation == .equal + }) + } }