Skip to content

Commit

Permalink
changed default priority to required
Browse files Browse the repository at this point in the history
  • Loading branch information
jmfieldman committed Nov 6, 2016
1 parent d12c0a4 commit cd53f94
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 19 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Mortar Changelog

## 1.1.0 -- 11/6/16

* Changed default constaint priority to .required

## 1.0.2 -- 11/5/16

* Fixes for macOS support
Expand Down
2 changes: 2 additions & 0 deletions Mortar.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
/* Begin PBXFileReference section */
355FCD241DAFDD3F0095C596 /* NSObject+Mortar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSObject+Mortar.swift"; sourceTree = "<group>"; };
355FCD261DAFE2290095C596 /* .swift-version */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ".swift-version"; sourceTree = SOURCE_ROOT; };
356CCBEC1DCFBCE400F25AE2 /* README_DEFAULTS.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README_DEFAULTS.md; sourceTree = SOURCE_ROOT; };
3585ABAD1D85C7D60063299C /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .travis.yml; sourceTree = SOURCE_ROOT; };
3585ABAE1D85DD630063299C /* README_SWIFT2.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README_SWIFT2.md; sourceTree = SOURCE_ROOT; };
35964B221CBE8E6700E54D22 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = SOURCE_ROOT; };
Expand Down Expand Up @@ -102,6 +103,7 @@
3585ABAD1D85C7D60063299C /* .travis.yml */,
35964B221CBE8E6700E54D22 /* README.md */,
3585ABAE1D85DD630063299C /* README_SWIFT2.md */,
356CCBEC1DCFBCE400F25AE2 /* README_DEFAULTS.md */,
35964B231CBE8E6700E54D22 /* Mortar.podspec */,
35964B241CBE8E6700E54D22 /* CHANGELOG.md */,
35964B251CBE8E6700E54D22 /* CONTRIBUTORS.md */,
Expand Down
30 changes: 20 additions & 10 deletions Mortar/Mortar.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,20 @@ import UIKit
public typealias MortarView = UIView
public typealias MortarAliasLayoutPriority = UILayoutPriority

let MortarAliasLayoutPriorityDefaultLow = UILayoutPriorityDefaultLow
let MortarAliasLayoutPriorityDefaultNormal = (UILayoutPriorityDefaultHigh + UILayoutPriorityDefaultLow) / 2
let MortarAliasLayoutPriorityDefaultHigh = UILayoutPriorityDefaultHigh
let MortarAliasLayoutPriorityDefaultRequired = UILayoutPriorityRequired
internal let MortarAliasLayoutPriorityDefaultLow = UILayoutPriorityDefaultLow
internal let MortarAliasLayoutPriorityDefaultMedium = (UILayoutPriorityDefaultHigh + UILayoutPriorityDefaultLow) / 2
internal let MortarAliasLayoutPriorityDefaultHigh = UILayoutPriorityDefaultHigh
internal let MortarAliasLayoutPriorityDefaultRequired = UILayoutPriorityRequired

#else
import AppKit
public typealias MortarView = NSView
public typealias MortarAliasLayoutPriority = NSLayoutPriority

let MortarAliasLayoutPriorityDefaultLow = NSLayoutPriorityDefaultLow
let MortarAliasLayoutPriorityDefaultNormal = (NSLayoutPriorityDefaultHigh + NSLayoutPriorityDefaultLow) / 2
let MortarAliasLayoutPriorityDefaultHigh = NSLayoutPriorityDefaultHigh
let MortarAliasLayoutPriorityDefaultRequired = NSLayoutPriorityRequired
internal let MortarAliasLayoutPriorityDefaultLow = NSLayoutPriorityDefaultLow
internal let MortarAliasLayoutPriorityDefaultMedium = (NSLayoutPriorityDefaultHigh + NSLayoutPriorityDefaultLow) / 2
internal let MortarAliasLayoutPriorityDefaultHigh = NSLayoutPriorityDefaultHigh
internal let MortarAliasLayoutPriorityDefaultRequired = NSLayoutPriorityRequired

#endif

Expand Down Expand Up @@ -235,14 +235,24 @@ internal enum MortarLayoutAttribute {
}

public enum MortarLayoutPriority {
case low, `default`, high, required
case low, medium, high, required

// As of v1.1, the actual default priority is .required.
// "default" is a misleading term for this enum.
// Medium is a better term for the priority between low and high.
@available(*, deprecated, message: "The default priority enumeration has been renamed medium")
case `default`

public func layoutPriority() -> MortarAliasLayoutPriority {
switch self {
case .low: return MortarAliasLayoutPriorityDefaultLow
case .default: return MortarAliasLayoutPriorityDefaultNormal
case .medium: return MortarAliasLayoutPriorityDefaultMedium
case .high: return MortarAliasLayoutPriorityDefaultHigh
case .required: return MortarAliasLayoutPriorityDefaultRequired

// Please note that this is a misleading enum value that remains MortarAliasLayoutPriorityDefaultMedium
// for compatibility reasons. The actual default priority of a constraint is now 1000/.required
case .default: return MortarAliasLayoutPriorityDefaultMedium
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion Mortar/MortarDefaultStack.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import Foundation
/* -- Defaults Stack -- */

internal var defaultPriorityStack: [MortarAliasLayoutPriority] = []
internal var defaultPriorityBase: MortarAliasLayoutPriority = MortarAliasLayoutPriorityDefaultNormal
internal var defaultPriorityBase: MortarAliasLayoutPriority = MortarAliasLayoutPriorityDefaultRequired

/**
The available defaults stacks.
Expand Down
12 changes: 6 additions & 6 deletions MortarTests/MortarTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -358,9 +358,9 @@ class MortarTests: XCTestCase {
v4 |=| self.container.m_height ! .required
v5 |=| self.container.m_height ! 300

XCTAssertEqual(self.container.constraints[0].priority, MortarAliasLayoutPriorityDefaultNormal, "Priority mismatch")
XCTAssertEqual(self.container.constraints[0].priority, MortarAliasLayoutPriorityDefaultMedium, "Priority mismatch")
XCTAssertEqual(self.container.constraints[1].priority, MortarAliasLayoutPriorityDefaultLow, "Priority mismatch")
XCTAssertEqual(self.container.constraints[2].priority, MortarAliasLayoutPriorityDefaultNormal, "Priority mismatch")
XCTAssertEqual(self.container.constraints[2].priority, MortarAliasLayoutPriorityDefaultMedium, "Priority mismatch")
XCTAssertEqual(self.container.constraints[3].priority, MortarAliasLayoutPriorityDefaultHigh, "Priority mismatch")
XCTAssertEqual(self.container.constraints[4].priority, MortarAliasLayoutPriorityDefaultRequired, "Priority mismatch")
XCTAssertEqual(self.container.constraints[5].priority, 300, "Priority mismatch")
Expand Down Expand Up @@ -400,9 +400,9 @@ class MortarTests: XCTestCase {

MortarDefault.priority.set(base: .default)

XCTAssertEqual(self.container.constraints[0].priority, MortarAliasLayoutPriorityDefaultNormal, "Priority mismatch")
XCTAssertEqual(self.container.constraints[0].priority, MortarAliasLayoutPriorityDefaultMedium, "Priority mismatch")
XCTAssertEqual(self.container.constraints[1].priority, MortarAliasLayoutPriorityDefaultLow, "Priority mismatch")
XCTAssertEqual(self.container.constraints[2].priority, MortarAliasLayoutPriorityDefaultNormal, "Priority mismatch")
XCTAssertEqual(self.container.constraints[2].priority, MortarAliasLayoutPriorityDefaultMedium, "Priority mismatch")
XCTAssertEqual(self.container.constraints[3].priority, MortarAliasLayoutPriorityDefaultHigh, "Priority mismatch")
XCTAssertEqual(self.container.constraints[4].priority, MortarAliasLayoutPriorityDefaultRequired, "Priority mismatch")
XCTAssertEqual(self.container.constraints[5].priority, 300, "Priority mismatch")
Expand Down Expand Up @@ -448,9 +448,9 @@ class MortarTests: XCTestCase {



XCTAssertEqual(self.container.constraints[0].priority, MortarAliasLayoutPriorityDefaultNormal, "Priority mismatch")
XCTAssertEqual(self.container.constraints[0].priority, MortarAliasLayoutPriorityDefaultMedium, "Priority mismatch")
XCTAssertEqual(self.container.constraints[1].priority, MortarAliasLayoutPriorityDefaultLow, "Priority mismatch")
XCTAssertEqual(self.container.constraints[2].priority, MortarAliasLayoutPriorityDefaultNormal, "Priority mismatch")
XCTAssertEqual(self.container.constraints[2].priority, MortarAliasLayoutPriorityDefaultMedium, "Priority mismatch")
XCTAssertEqual(self.container.constraints[3].priority, MortarAliasLayoutPriorityDefaultRequired, "Priority mismatch")
XCTAssertEqual(self.container.constraints[4].priority, MortarAliasLayoutPriorityDefaultLow, "Priority mismatch")
XCTAssertEqual(self.container.constraints[5].priority, MortarAliasLayoutPriorityDefaultHigh, "Priority mismatch")
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@ Other examples:
[view.m_sides, view.m_bottom, view.m_height] |=| [container, container, 200]
```

> This README reflects the updated syntax and constants used in the Swift 3 Mortar release.
> For the Swift 2.x documentation, refer to the ```README_SWIFT2.md``` file.
#### Updating from a version prior to v1.1? Read this!

> A change in the default Mortar constraint priority took effect in v1.1. Please read the README_DEFAULTS.md file for more information.
# Why?

Expand Down
25 changes: 25 additions & 0 deletions README_DEFAULTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
## Important Notice for Updating to Mortar v1.1+

*Please read this if you are updating Mortar from a version before v1.1 to a version at or beyond v1.1*

Prior to v1.1, the default Mortar constraint priority was 500. It was an erroneous assumption by me (Jason) that
NSLayoutContraints created in normal Auto Layout functions were given a priority of 500 unless otherwise specified. In fact,
Apple gives constraints a default value 1000 (ref: [```NSLayoutConstraint```](https://developer.apple.com/reference/uikit/nslayoutconstraint)).

In Mortar v1.1, to eliminate this priority mismatch and make the library less confusing to new users, the default Mortar constraint priority was changed from 500 to 1000, to match Apple's default NSLayoutContraint priority. What this means from a coding perspective:

```swift
// prior to v1.1:
view1 |=| view2 // <-- given priority 500 (.medium)

// v1.1 or beyond:
view1 |=| view2 // <-- given priority 1000 (.required)
```

If your codebase was created with Mortar previous to v1.1, and your code relies on the assumption that the default Mortar priority is 500, you can put the following in your ```AppDelegate```'s ```application:didFinishLaunchingWithOptions:``` before any other Mortar call:

```swift
// Set base constraint priority to 500 (.medium):
MortarDefault.priority.set(base: .medium)
```

0 comments on commit cd53f94

Please sign in to comment.