mirror of https://github.com/SnapKit/SnapKit
Allow install and uninstall to be indempotent
This commit is contained in:
parent
2701293432
commit
faf7d43aaf
|
@ -287,11 +287,6 @@ public class Constraint {
|
|||
// MARK: internal
|
||||
|
||||
internal func installOnView(updateExisting: Bool = false) -> Array<LayoutConstraint> {
|
||||
if self.installedOnView != nil {
|
||||
NSException(name: "Cannot Install Constraint", reason: "Already installed", userInfo: nil).raise()
|
||||
return []
|
||||
}
|
||||
|
||||
var installOnView: View? = nil
|
||||
if self.toItem.view != nil {
|
||||
installOnView = Constraint.closestCommonSuperviewFromView(self.fromItem.view, toView: self.toItem.view)
|
||||
|
@ -306,13 +301,21 @@ public class Constraint {
|
|||
installOnView = self.fromItem.view
|
||||
}
|
||||
|
||||
if installedOnView == nil {
|
||||
if installOnView == nil {
|
||||
NSException(name: "Cannot Install Constraint", reason: "Missing superview", userInfo: nil).raise()
|
||||
return []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if self.installedOnView != nil {
|
||||
if self.installedOnView != installOnView {
|
||||
NSException(name: "Cannot Install Constraint", reason: "Already installed on different view.", userInfo: nil).raise()
|
||||
return []
|
||||
}
|
||||
return self.installedLayoutConstraints?.allObjects as Array<LayoutConstraint>
|
||||
}
|
||||
|
||||
var newLayoutConstraints = Array<LayoutConstraint>()
|
||||
let layoutFromAttributes = self.fromItem.attributes.layoutAttributes
|
||||
let layoutToAttributes = self.toItem.attributes.layoutAttributes
|
||||
|
|
|
@ -140,4 +140,30 @@ class SnapTests: XCTestCase {
|
|||
|
||||
}
|
||||
|
||||
func testReinstallConstraints() {
|
||||
let v1 = UIView()
|
||||
let v2 = UIView()
|
||||
self.container.addSubview(v1)
|
||||
self.container.addSubview(v2)
|
||||
|
||||
let constraints = v1.snp_prepareConstraints { (make) -> Void in
|
||||
make.edges.equalTo(v2)
|
||||
return
|
||||
}
|
||||
|
||||
XCTAssertEqual(self.container.constraints().count, 0, "Should have 0 constraints installed")
|
||||
|
||||
for constraint in constraints {
|
||||
constraint.install()
|
||||
}
|
||||
|
||||
XCTAssertEqual(self.container.constraints().count, 4, "Should have 4 constraints installed")
|
||||
|
||||
for constraint in constraints {
|
||||
constraint.install()
|
||||
}
|
||||
|
||||
XCTAssertEqual(self.container.constraints().count, 4, "Should have 0 constraints installed")
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue