mirror of https://github.com/SnapKit/SnapKit
Adds two new compositions – DirectionalEdges and DirectionalMargins (#595)
* WIP * Add directional margins * Whitespace
This commit is contained in:
parent
222e14ab37
commit
d482f59648
|
@ -129,6 +129,32 @@ public final class Constraint {
|
|||
default:
|
||||
fatalError()
|
||||
}
|
||||
} else if self.from.attributes == .directionalEdges && self.to.attributes == .directionalMargins {
|
||||
switch layoutFromAttribute {
|
||||
case .leading:
|
||||
layoutToAttribute = .leadingMargin
|
||||
case .trailing:
|
||||
layoutToAttribute = .trailingMargin
|
||||
case .top:
|
||||
layoutToAttribute = .topMargin
|
||||
case .bottom:
|
||||
layoutToAttribute = .bottomMargin
|
||||
default:
|
||||
fatalError()
|
||||
}
|
||||
} else if self.from.attributes == .directionalMargins && self.to.attributes == .directionalEdges {
|
||||
switch layoutFromAttribute {
|
||||
case .leadingMargin:
|
||||
layoutToAttribute = .leading
|
||||
case .trailingMargin:
|
||||
layoutToAttribute = .trailing
|
||||
case .topMargin:
|
||||
layoutToAttribute = .top
|
||||
case .bottomMargin:
|
||||
layoutToAttribute = .bottom
|
||||
default:
|
||||
fatalError()
|
||||
}
|
||||
} else if self.from.attributes == self.to.attributes {
|
||||
layoutToAttribute = layoutFromAttribute
|
||||
} else {
|
||||
|
|
|
@ -99,12 +99,16 @@ internal struct ConstraintAttributes : OptionSet, ExpressibleByIntegerLiteral {
|
|||
// aggregates
|
||||
|
||||
internal static var edges: ConstraintAttributes { return 15 }
|
||||
internal static var directionalEdges: ConstraintAttributes { return 58 }
|
||||
internal static var size: ConstraintAttributes { return 192 }
|
||||
internal static var center: ConstraintAttributes { return 768 }
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static var margins: ConstraintAttributes { return 61440 }
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static var directionalMargins: ConstraintAttributes { return 245760 }
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
internal static var centerWithinMargins: ConstraintAttributes { return 786432 }
|
||||
|
||||
|
|
|
@ -99,6 +99,10 @@ extension ConstraintBasicAttributesDSL {
|
|||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.edges)
|
||||
}
|
||||
|
||||
public var directionalEdges: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalEdges)
|
||||
}
|
||||
|
||||
public var size: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.size)
|
||||
}
|
||||
|
@ -177,6 +181,11 @@ extension ConstraintAttributesDSL {
|
|||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.margins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var directionalMargins: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalMargins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerWithinMargins: ConstraintItem {
|
||||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins)
|
||||
|
|
|
@ -126,6 +126,9 @@ public class ConstraintMaker {
|
|||
public var edges: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.edges)
|
||||
}
|
||||
public var directionalEdges: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.directionalEdges)
|
||||
}
|
||||
public var size: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.size)
|
||||
}
|
||||
|
@ -138,6 +141,11 @@ public class ConstraintMaker {
|
|||
return self.makeExtendableWithAttributes(.margins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var directionalMargins: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.directionalMargins)
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerWithinMargins: ConstraintMakerExtendable {
|
||||
return self.makeExtendableWithAttributes(.centerWithinMargins)
|
||||
|
|
|
@ -149,6 +149,10 @@ public class ConstraintMakerExtendable: ConstraintMakerRelatable {
|
|||
self.description.attributes += .edges
|
||||
return self
|
||||
}
|
||||
public var directionalEdges: ConstraintMakerExtendable {
|
||||
self.description.attributes += .directionalEdges
|
||||
return self
|
||||
}
|
||||
public var size: ConstraintMakerExtendable {
|
||||
self.description.attributes += .size
|
||||
return self
|
||||
|
@ -160,6 +164,12 @@ public class ConstraintMakerExtendable: ConstraintMakerRelatable {
|
|||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var directionalMargins: ConstraintMakerExtendable {
|
||||
self.description.attributes += .directionalMargins
|
||||
return self
|
||||
}
|
||||
|
||||
@available(iOS 8.0, *)
|
||||
public var centerWithinMargins: ConstraintMakerExtendable {
|
||||
self.description.attributes += .centerWithinMargins
|
||||
|
|
|
@ -45,7 +45,9 @@ public class ConstraintMakerRelatable {
|
|||
other.attributes.layoutAttributes.count <= 1 ||
|
||||
other.attributes.layoutAttributes == self.description.attributes.layoutAttributes ||
|
||||
other.attributes == .edges && self.description.attributes == .margins ||
|
||||
other.attributes == .margins && self.description.attributes == .edges else {
|
||||
other.attributes == .margins && self.description.attributes == .edges ||
|
||||
other.attributes == .directionalEdges && self.description.attributes == .directionalMargins ||
|
||||
other.attributes == .directionalMargins && self.description.attributes == .directionalEdges else {
|
||||
fatalError("Cannot constraint to multiple non identical attributes. (\(file), \(line))");
|
||||
}
|
||||
|
||||
|
|
|
@ -575,6 +575,28 @@ class SnapKitTests: XCTestCase {
|
|||
XCTAssert(fromAttributes == [.top, .left, .bottom, .right])
|
||||
XCTAssert(toAttributes == [.top, .left, .bottom, .right])
|
||||
}
|
||||
|
||||
func testDirectionalEdgesToDirectionalEdges() {
|
||||
var fromAttributes = Set<LayoutAttribute>()
|
||||
var toAttributes = Set<LayoutAttribute>()
|
||||
|
||||
let view = View()
|
||||
self.container.addSubview(view)
|
||||
|
||||
view.snp.remakeConstraints { (make) -> Void in
|
||||
make.directionalEdges.equalTo(self.container.snp.directionalEdges)
|
||||
}
|
||||
|
||||
XCTAssertEqual(self.container.snp_constraints.count, 4, "Should have 4 constraints")
|
||||
|
||||
for constraint in (container.snp_constraints as! [NSLayoutConstraint]) {
|
||||
fromAttributes.insert(constraint.firstAttribute)
|
||||
toAttributes.insert(constraint.secondAttribute)
|
||||
}
|
||||
|
||||
XCTAssert(fromAttributes == [.top, .leading, .bottom, .trailing])
|
||||
XCTAssert(toAttributes == [.top, .leading, .bottom, .trailing])
|
||||
}
|
||||
|
||||
#if os(iOS) || os(tvOS)
|
||||
func testEdgesToMargins() {
|
||||
|
@ -616,6 +638,46 @@ class SnapKitTests: XCTestCase {
|
|||
XCTAssert(fromAttributes == [.topMargin, .leftMargin, .bottomMargin, .rightMargin])
|
||||
|
||||
}
|
||||
|
||||
func testDirectionalEdgesToDirectionalMargins() {
|
||||
var fromAttributes = Set<LayoutAttribute>()
|
||||
var toAttributes = Set<LayoutAttribute>()
|
||||
|
||||
let view = View()
|
||||
self.container.addSubview(view)
|
||||
|
||||
view.snp.remakeConstraints { (make) -> Void in
|
||||
make.directionalEdges.equalTo(self.container.snp.directionalMargins)
|
||||
}
|
||||
|
||||
XCTAssertEqual(self.container.snp_constraints.count, 4, "Should have 4 constraints")
|
||||
|
||||
for constraint in (container.snp_constraints as! [NSLayoutConstraint]) {
|
||||
fromAttributes.insert(constraint.firstAttribute)
|
||||
toAttributes.insert(constraint.secondAttribute)
|
||||
}
|
||||
|
||||
XCTAssert(fromAttributes == [.top, .leading, .bottom, .trailing])
|
||||
XCTAssert(toAttributes == [.topMargin, .leadingMargin, .bottomMargin, .trailingMargin])
|
||||
|
||||
fromAttributes.removeAll()
|
||||
toAttributes.removeAll()
|
||||
|
||||
view.snp.remakeConstraints { (make) -> Void in
|
||||
make.directionalMargins.equalTo(self.container.snp.directionalEdges)
|
||||
}
|
||||
|
||||
XCTAssertEqual(self.container.snp_constraints.count, 4, "Should have 4 constraints")
|
||||
|
||||
for constraint in (container.snp_constraints as! [NSLayoutConstraint]) {
|
||||
fromAttributes.insert(constraint.firstAttribute)
|
||||
toAttributes.insert(constraint.secondAttribute)
|
||||
}
|
||||
|
||||
XCTAssert(toAttributes == [.top, .leading, .bottom, .trailing])
|
||||
XCTAssert(fromAttributes == [.topMargin, .leadingMargin, .bottomMargin, .trailingMargin])
|
||||
|
||||
}
|
||||
|
||||
func testLayoutGuideConstraints() {
|
||||
let vc = UIViewController()
|
||||
|
|
Loading…
Reference in New Issue