Skip to content

Commit

Permalink
Merge pull request #3 from NickBabo/feature/issue-2-add-dimension-con…
Browse files Browse the repository at this point in the history
…straints-with-relative-relations

[Issue #2] Add Dimension constraints with relative relations
  • Loading branch information
dogo committed Jul 27, 2020
2 parents 1fcb4df + e5ab44a commit b071ffa
Show file tree
Hide file tree
Showing 4 changed files with 142 additions and 10 deletions.
2 changes: 1 addition & 1 deletion SketchKit.podspec
Expand Up @@ -8,7 +8,7 @@

Pod::Spec.new do |s|
s.name = 'SketchKit'
s.version = '1.2.0'
s.version = '1.3.0'
s.summary = 'A lightweight autolayout DSL library for iOS.'
s.homepage = 'https://github.com/dogo/SketchKit'
s.license = { :type => 'MIT', :file => 'LICENSE' }
Expand Down
28 changes: 28 additions & 0 deletions Sources/SketchKit/Extensions/UIView+Anchors.swift
Expand Up @@ -224,6 +224,20 @@ public extension UIView {
return self
}

@discardableResult
func heightAnchor(lessThanOrEqualTo layoutDimension: NSLayoutDimension, multiplier: CGFloat = 1.0) -> Self {
let constraint = heightAnchor.constraint(lessThanOrEqualTo: layoutDimension, multiplier: multiplier)
constraint.isActive = true
return self
}

@discardableResult
func heightAnchor(greaterThanOrEqual layoutDimension: NSLayoutDimension, multiplier: CGFloat = 1.0) -> Self {
let constraint = heightAnchor.constraint(greaterThanOrEqualTo: layoutDimension, multiplier: multiplier)
constraint.isActive = true
return self
}

@discardableResult
func widthAnchor(equalTo width: CGFloat,
priority: UILayoutPriority = UILayoutPriority.required) -> Self {
Expand Down Expand Up @@ -258,6 +272,20 @@ public extension UIView {
return self
}

@discardableResult
func widthAnchor(lessThanOrEqualTo layoutDimension: NSLayoutDimension, multiplier: CGFloat = 1.0) -> Self {
let constraint = widthAnchor.constraint(lessThanOrEqualTo: layoutDimension, multiplier: multiplier)
constraint.isActive = true
return self
}

@discardableResult
func widthAnchor(greaterThanOrEqual layoutDimension: NSLayoutDimension, multiplier: CGFloat = 1.0) -> Self {
let constraint = widthAnchor.constraint(greaterThanOrEqualTo: layoutDimension, multiplier: multiplier)
constraint.isActive = true
return self
}

@discardableResult
func centerXAnchor(equalTo anchor: NSLayoutXAxisAnchor,
constant: CGFloat = 0,
Expand Down
62 changes: 57 additions & 5 deletions Tests/SketchKitTests/UIView/HeightAnchorTests.swift
Expand Up @@ -64,9 +64,9 @@ final class HeightAnchorTests: XCTestCase {
XCTAssertEqual(constraints[0].relation, NSLayoutConstraint.Relation.equal, "Should be equal")
}

// MARK: - HeightAnchor greaterThanOrEqualTo
// MARK: - HeightAnchor greaterThanOrEqualToConstant

func testHeightAnchorGreaterThanOrEqualTo() {
func testHeightAnchorGreaterThanOrEqualToConstant() {

let view = UIView()
self.container.addSubview(view)
Expand All @@ -84,9 +84,9 @@ final class HeightAnchorTests: XCTestCase {
XCTAssertEqual(constraints[0].relation, NSLayoutConstraint.Relation.greaterThanOrEqual, "Should be greaterThanOrEqual")
}

// MARK: - HeightAnchor lessThanOrEqualTo
// MARK: - HeightAnchor lessThanOrEqualToConstant

func testHeightAnchorLessThanOrEqual() {
func testHeightAnchorLessThanOrEqualToConstant() {

let view = UIView()
self.container.addSubview(view)
Expand All @@ -104,10 +104,62 @@ final class HeightAnchorTests: XCTestCase {
XCTAssertEqual(constraints[0].relation, NSLayoutConstraint.Relation.lessThanOrEqual, "Should be lessThanOrEqual")
}

// MARK: - HeightAnchor greaterThanOrEqualTo

func testHeightAnchorGreaterThanOrEqualTo() {

let viewOne = UIView()
let viewTwo = UIView()
self.container.addSubview(viewOne)
self.container.addSubview(viewTwo)

viewTwo.frame = CGRect(x: 0, y: 0, width: 20, height: 20)

viewOne.layout.applyConstraint { view in
view.heightAnchor(greaterThanOrEqual: viewTwo.heightAnchor)
view.heightAnchor(equalTo: 10)
}

viewOne.layoutIfNeeded()

let constraints = viewOne.constraints

XCTAssertEqual(constraints.count, 1, "Should have 1 constraint installed")
XCTAssertEqual(constraints[0].constant, 10, "Constant should be 10")
XCTAssertEqual(viewOne.frame.height, 20, "Should be 20")
}

// MARK: - HeightAnchor lessThanOrEqualTo

func testHeightAnchorLessThanOrEqualTo() {

let viewOne = UIView()
let viewTwo = UIView()
self.container.addSubview(viewOne)
self.container.addSubview(viewTwo)

viewTwo.frame = CGRect(x: 0, y: 0, width: 20, height: 20)

viewOne.layout.applyConstraint { view in
view.heightAnchor(lessThanOrEqualTo: viewTwo.heightAnchor)
view.heightAnchor(equalTo: 30)
}

viewOne.layoutIfNeeded()

let constraints = viewOne.constraints

XCTAssertEqual(constraints.count, 1, "Should have 1 constraint installed")
XCTAssertEqual(constraints[0].constant, 30, "Constant should be 30")
XCTAssertEqual(viewOne.frame.height, 20, "Should be 20")
}

static var allTests = [
("testHeightAnchor", testHeightAnchor),
("testSafeHeightAnchor", testSafeHeightAnchor),
("testHeightAnchorGreaterThanOrEqualToConstant", testHeightAnchorGreaterThanOrEqualToConstant),
("testHeightAnchorLessThanOrEqualToConstant", testHeightAnchorLessThanOrEqualToConstant),
("testHeightAnchorGreaterThanOrEqualTo", testHeightAnchorGreaterThanOrEqualTo),
("testHeightAnchorLessThanOrEqual", testHeightAnchorLessThanOrEqual)
("testHeightAnchorLessThanOrEqualTo", testHeightAnchorLessThanOrEqualTo)
]
}
60 changes: 56 additions & 4 deletions Tests/SketchKitTests/UIView/WidthAnchorTests.swift
Expand Up @@ -66,7 +66,7 @@ final class WidthAnchorTests: XCTestCase {

// MARK: - WidthAnchor greaterThanOrEqual

func testWidthAnchorGreaterThanOrEqual() {
func testWidthAnchorGreaterThanOrEqualToConstant() {

let view = UIView()
self.container.addSubview(view)
Expand All @@ -84,9 +84,9 @@ final class WidthAnchorTests: XCTestCase {
XCTAssertEqual(constraints[0].relation, NSLayoutConstraint.Relation.greaterThanOrEqual, "Should be greaterThanOrEqual")
}

// MARK: - WidthAnchor greaterThanOrEqual
// MARK: - WidthAnchor lessThanOrEqualToConstant

func testWidthAnchorLessThanOrEqualTo() {
func testWidthAnchorLessThanOrEqualToConstant() {

let view = UIView()
self.container.addSubview(view)
Expand All @@ -104,10 +104,62 @@ final class WidthAnchorTests: XCTestCase {
XCTAssertEqual(constraints[0].relation, NSLayoutConstraint.Relation.lessThanOrEqual, "Should be lessThanOrEqual")
}

// MARK: - WidthAnchor greaterThanOrEqualTo

func testWidthAnchorGreaterThanOrEqualTo() {

let viewOne = UIView()
let viewTwo = UIView()
self.container.addSubview(viewOne)
self.container.addSubview(viewTwo)

viewTwo.frame = CGRect(x: 0, y: 0, width: 20, height: 20)

viewOne.layout.applyConstraint { view in
view.widthAnchor(greaterThanOrEqual: viewTwo.widthAnchor)
view.widthAnchor(equalTo: 10)
}

viewOne.layoutIfNeeded()

let constraints = viewOne.constraints

XCTAssertEqual(constraints.count, 1, "Should have 1 constraint installed")
XCTAssertEqual(constraints[0].constant, 10, "Constant should be 10")
XCTAssertEqual(viewOne.frame.width, 20, "Should be 20")
}

// MARK: - WidthAnchor lessThanOrEqualTo

func testWidthAnchorLessThanOrEqualTo() {

let viewOne = UIView()
let viewTwo = UIView()
self.container.addSubview(viewOne)
self.container.addSubview(viewTwo)

viewTwo.frame = CGRect(x: 0, y: 0, width: 20, height: 20)

viewOne.layout.applyConstraint { view in
view.widthAnchor(lessThanOrEqualTo: viewTwo.widthAnchor)
view.widthAnchor(equalTo: 30)
}

viewOne.layoutIfNeeded()

let constraints = viewOne.constraints

XCTAssertEqual(constraints.count, 1, "Should have 1 constraint installed")
XCTAssertEqual(constraints[0].constant, 30, "Constant should be 30")
XCTAssertEqual(viewOne.frame.width, 20, "Should be 20")
}

static var allTests = [
("testWidthAnchor", testWidthAnchor),
("testSafeWidthAnchor", testSafeWidthAnchor),
("testWidthAnchorGreaterThanOrEqual", testWidthAnchorGreaterThanOrEqual),
("testWidthAnchorGreaterThanOrEqual", testWidthAnchorGreaterThanOrEqualToConstant),
("testWidthAnchorLessThanOrEqualTo", testWidthAnchorLessThanOrEqualToConstant),
("testWidthAnchorGreaterThanOrEqualTo", testWidthAnchorGreaterThanOrEqualTo),
("testWidthAnchorLessThanOrEqualTo", testWidthAnchorLessThanOrEqualTo)
]
}

0 comments on commit b071ffa

Please sign in to comment.