Created
November 25, 2017 14:00
-
-
Save Deub27/5eadbf1b77ce28abd9b630eadb95c1e2 to your computer and use it in GitHub Desktop.
Remove all arranged subviews from UIStackView at once
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
extension UIStackView { | |
func removeAllArrangedSubviews() { | |
let removedSubviews = arrangedSubviews.reduce([]) { (allSubviews, subview) -> [UIView] in | |
self.removeArrangedSubview(subview) | |
return allSubviews + [subview] | |
} | |
// Deactivate all constraints | |
NSLayoutConstraint.deactivate(removedSubviews.flatMap({ $0.constraints })) | |
// Remove the views from self | |
removedSubviews.forEach({ $0.removeFromSuperview() }) | |
} | |
} |
Or you can do it like this:
stack.arrangedSubviews
.filter({ $0 is SomeView })
.forEach({ $0.removeFromSuperview() })
Please corret me if I'm wrong but from my understanding you could simply do the following to remove all arrangedSubviews:
extension UIStackView {
func removeAllArrangedSubviews() {
arrangedSubviews.forEach {
self.removeArrangedSubview($0)
NSLayoutConstraint.deactivate($0.constraints)
$0.removeFromSuperview()
}
}
}
Worked like a charm 👍
Just the SnapKit version:
import UIKit
import SnapKit
extension UIStackView {
func removeArrangedSubviews() {
guard !arrangedSubviews.isEmpty else { return }
let subviewsToRemove = arrangedSubviews.reduce([]) { allSubviews, subview -> [UIView] in
self.removeArrangedSubview(subview)
return allSubviews + [subview]
}
subviewsToRemove.forEach { subview in
subview.snp.removeConstraints()
subview.removeFromSuperview()
}
}
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If someone will confuse on how to use magpali code then here's the same: