mirror of https://github.com/SnapKit/SnapKit
Add support for edges to margins and margins to edges
This commit is contained in:
parent
2f803657af
commit
514ec79042
|
@ -80,7 +80,42 @@ public class Constraint {
|
|||
|
||||
for layoutFromAttribute in layoutFromAttributes {
|
||||
// get layout to attribute
|
||||
let layoutToAttribute = (layoutToAttributes.count > 0) ? layoutToAttributes[0] : layoutFromAttribute
|
||||
let layoutToAttribute: NSLayoutAttribute
|
||||
if layoutToAttributes.count > 1 {
|
||||
if self.from.attributes == .edges && self.to.attributes == .margins {
|
||||
switch layoutFromAttribute {
|
||||
case .left:
|
||||
layoutToAttribute = .leftMargin
|
||||
case .right:
|
||||
layoutToAttribute = .rightMargin
|
||||
case .top:
|
||||
layoutToAttribute = .topMargin
|
||||
case .bottom:
|
||||
layoutToAttribute = .bottomMargin
|
||||
default:
|
||||
fatalError()
|
||||
}
|
||||
} else if self.from.attributes == .margins && self.to.attributes == .edges {
|
||||
switch layoutFromAttribute {
|
||||
case .leftMargin:
|
||||
layoutToAttribute = .left
|
||||
case .rightMargin:
|
||||
layoutToAttribute = .right
|
||||
case .topMargin:
|
||||
layoutToAttribute = .top
|
||||
case .bottomMargin:
|
||||
layoutToAttribute = .bottom
|
||||
default:
|
||||
fatalError()
|
||||
}
|
||||
} else {
|
||||
layoutToAttribute = layoutToAttributes[0]
|
||||
}
|
||||
} else if layoutToAttributes.count == 1 {
|
||||
layoutToAttribute = layoutToAttributes[0]
|
||||
} else {
|
||||
layoutToAttribute = layoutFromAttribute
|
||||
}
|
||||
|
||||
// get layout constant
|
||||
let layoutConstant: CGFloat = self.constant.constraintConstantTargetValueFor(layoutAttribute: layoutToAttribute)
|
||||
|
|
|
@ -43,7 +43,9 @@ public class ConstraintMakerRelatable {
|
|||
if let other = other as? ConstraintItem {
|
||||
guard other.attributes == ConstraintAttributes.none ||
|
||||
other.attributes.layoutAttributes.count <= 1 ||
|
||||
other.attributes.layoutAttributes == self.description.attributes.layoutAttributes else {
|
||||
other.attributes.layoutAttributes == self.description.attributes.layoutAttributes ||
|
||||
other.attributes == .edges && self.description.attributes == .margins ||
|
||||
other.attributes == .margins && self.description.attributes == .edges else {
|
||||
fatalError("Cannot constraint to multiple non identical attributes. (\(file), \(line))");
|
||||
}
|
||||
|
||||
|
|
|
@ -418,4 +418,44 @@ class SnapKitTests: XCTestCase {
|
|||
XCTAssertEqual(constraints[0].identifier, identifier, "Identifier should be 'Test'")
|
||||
}
|
||||
|
||||
func testEdgesToMargins() {
|
||||
var fromAttributes = Set<NSLayoutAttribute>()
|
||||
var toAttributes = Set<NSLayoutAttribute>()
|
||||
|
||||
let view = View()
|
||||
self.container.addSubview(view)
|
||||
|
||||
view.snp.remakeConstraints { (make) -> Void in
|
||||
make.edges.equalTo(self.container.snp.margins)
|
||||
}
|
||||
|
||||
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, .left, .bottom, .right])
|
||||
XCTAssert(toAttributes == [.topMargin, .leftMargin, .bottomMargin, .rightMargin])
|
||||
|
||||
fromAttributes.removeAll()
|
||||
toAttributes.removeAll()
|
||||
|
||||
view.snp.remakeConstraints { (make) -> Void in
|
||||
make.margins.equalTo(self.container.snp.edges)
|
||||
}
|
||||
|
||||
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, .left, .bottom, .right])
|
||||
XCTAssert(fromAttributes == [.topMargin, .leftMargin, .bottomMargin, .rightMargin])
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue