Skip to content

Commit

Permalink
Merge pull request #18 from urbn/Layout_activateWithPriority
Browse files Browse the repository at this point in the history
Layout - Activate w/ Priority
  • Loading branch information
jgrandelli authored Dec 14, 2017
2 parents 2d6fd8a + f7378a9 commit 3194b05
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 7 deletions.
4 changes: 2 additions & 2 deletions Example/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
PODS:
- URBNSwiftyConvenience (0.4.1)
- URBNSwiftyConvenience (0.4.2)

DEPENDENCIES:
- URBNSwiftyConvenience (from `../`)
Expand All @@ -9,7 +9,7 @@ EXTERNAL SOURCES:
:path: ../

SPEC CHECKSUMS:
URBNSwiftyConvenience: 37576ec8ddd157cf5b747df482de1170c623dc58
URBNSwiftyConvenience: 717e90f54a313fbb998ea705707e9801edc47f37

PODFILE CHECKSUM: b1a00df3b001c7558afb1929e95f3522d9d92a6b

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Example/Pods/Manifest.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Example/URBNSwiftyConvenience/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,14 @@ class ViewController: UIViewController {
animateBorder.widthAnchor.constraint(equalToConstant: 300).isActive = true
animateBorder.topAnchor.constraint(equalTo: clearBorder.bottomAnchor, constant: 40).isActive = true
}

let constraintPriorityTestView = UIView()
constraintPriorityTestView.backgroundColor = .blue
view.addSubviewsWithNoConstraints(constraintPriorityTestView)
constraintPriorityTestView.topAnchor.constraint(equalTo: view.topAnchor).activate(withPriority: .defaultLow)
constraintPriorityTestView.leftAnchor.constraint(equalTo: view.leftAnchor).activate(withPriority: .defaultHigh + 1)
constraintPriorityTestView.widthAnchor.constraint(equalToConstant: 42.0).activate(withPriority: .required)
constraintPriorityTestView.heightAnchor.constraint(equalToConstant: 42.0).activate(withPriority: ConstraintPriority(UILayoutPriorityDefaultHigh - 1))
}

override func viewDidAppear(_ animated: Bool) {
Expand Down
52 changes: 52 additions & 0 deletions URBNSwiftyConvenience/Classes/LayoutConvenience.swift
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,55 @@ public extension UIStackView {
}
}
}

// TODO: Refactor out when we move to swifty 4
// Also we could adopt add & subtract capability similar to - https://useyourloaf.com/blog/easier-swift-layout-priorities/
@available(swift, obsoleted: 4.0)
public struct ConstraintPriority: RawRepresentable {

public static let defaultLow: ConstraintPriority = ConstraintPriority(UILayoutPriorityDefaultLow)
public static let defaultHigh: ConstraintPriority = ConstraintPriority(UILayoutPriorityDefaultHigh)
public static let required: ConstraintPriority = ConstraintPriority(UILayoutPriorityRequired)
public static let fittingSizeLevel: ConstraintPriority = ConstraintPriority(UILayoutPriorityFittingSizeLevel)

public var rawValue: Float

public init(_ rawValue: Float) {
self.rawValue = rawValue
}

public init(rawValue: Float) {
self.rawValue = rawValue
}
}

extension ConstraintPriority: Equatable, Hashable {
public var hashValue: Int {
return rawValue.hashValue
}

public static func == (lhs: ConstraintPriority, rhs: ConstraintPriority) -> Bool {
return lhs.rawValue == rhs.rawValue
}
}

public extension ConstraintPriority {
static func +(lhs: ConstraintPriority, rhs: Float) -> ConstraintPriority {
return ConstraintPriority(lhs.rawValue + rhs)
}

static func -(lhs: ConstraintPriority, rhs: Float) -> ConstraintPriority {
return ConstraintPriority(lhs.rawValue - rhs)
}
}


public extension NSLayoutConstraint {

// TODO: Refactor out when we move to swifty 4
@available(swift, obsoleted: 4.0)
public func activate(withPriority constraintPriority: ConstraintPriority) {
self.priority = constraintPriority.rawValue
isActive = true
}
}

0 comments on commit 3194b05

Please sign in to comment.