Merge pull request #43 from Masonry/develop

Release 0.0.4
This commit is contained in:
Robert Payne 2015-01-27 01:34:18 +13:00
commit c3a662a7f4
1 changed files with 29 additions and 22 deletions

View File

@ -297,10 +297,16 @@ public class Constraint {
} else {
installOnView = self.fromItem.view?.superview
if installOnView == nil {
if self.fromItem.attributes == ConstraintAttributes.Width || self.fromItem.attributes == ConstraintAttributes.Height {
installOnView = self.fromItem.view
}
if installedOnView == nil {
NSException(name: "Cannot Install Constraint", reason: "Missing superview", userInfo: nil).raise()
return []
}
}
}
var layoutConstraints: Array<LayoutConstraint> = []
let layoutFromAttributes = self.fromItem.attributes.layoutAttributes
@ -384,38 +390,38 @@ public class Constraint {
installOnView!.addConstraints(layoutConstraints)
self.installedOnView = installOnView
self.installedLayoutConstraints = NSHashTable.weakObjectsHashTable()
for layoutConstraint in layoutConstraints {
self.installedLayoutConstraints!.addObject(layoutConstraint)
}
return layoutConstraints
}
internal func uninstallFromView() {
if let view = self.installedOnView {
#if os(iOS)
var installedConstraints = view.constraints()
#else
var installedConstraints = view.constraints
#endif
var constraintsToRemove: Array<LayoutConstraint> = []
for installedConstraint in installedConstraints {
if let layoutConstraint = installedConstraint as? LayoutConstraint {
if layoutConstraint.constraint === self {
constraintsToRemove.append(layoutConstraint)
}
}
}
if constraintsToRemove.count > 0 {
view.removeConstraints(constraintsToRemove)
// remove all installed layout constraints
var layoutConstraintsToRemove = Array<LayoutConstraint>()
if let installedLayoutConstraints = self.installedLayoutConstraints?.allObjects as? Array<LayoutConstraint> {
layoutConstraintsToRemove += installedLayoutConstraints
}
if layoutConstraintsToRemove.count > 0 {
view.removeConstraints(layoutConstraintsToRemove)
}
// clean up the snp_installedLayoutConstraints
var layoutConstraints = view.snp_installedLayoutConstraints
var layoutConstraintsToKeep = Array<LayoutConstraint>()
for layoutConstraint in layoutConstraints {
if !contains(constraintsToRemove, layoutConstraint) {
if !contains(layoutConstraintsToRemove, layoutConstraint) {
layoutConstraintsToKeep.append(layoutConstraint)
}
}
view.snp_installedLayoutConstraints = layoutConstraintsToKeep
}
self.installedOnView = nil
self.installedLayoutConstraints = nil
}
// MARK: private
@ -428,6 +434,7 @@ public class Constraint {
private var priority: Float = 1000.0
private var offset: Any?
private var installedLayoutConstraints: NSHashTable?
private weak var installedOnView: View?
private func addConstraint(attributes: ConstraintAttributes) -> Constraint {