How do I remove all of the subviews from a UIScrollview?
Let scrollView
be an instance of UIScrollView
.
In Objective-C, it's pretty easy. Just call makeObjectsPerformSelector:
, like so:
Objective-C:
[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
In Swift, you don't get that runtime access, so you have to actually handle the iteration yourself.
Swift:
A concise version, from here:
scrollview.subviews.map { $0.removeFromSuperview() }
A more descriptive way to do this (from here) assumes scrollview.subviews
:
let subviews = self.scrollView.subviews
for subview in subviews{
subview.removeFromSuperview()
}
I think you just have to be careful and not to delete the scroll indicator bars.
The code given by Adam Ko is short and elegant but it may delete the horizontal and vertical scroll indicators.
I usually do
for (UIView *v in scrollView.subviews) {
if (![v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
Suposing you don't have UIImageView's added to the scroll manually.
In addition to Ricardo de Cillo's, in my case I had a table view that had imageviews in the subviews that I wanted to remove.
for (UIView *v in self.tableview.subviews) {
if ([v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
The removal of the ! in the if command, and change scrollview
to self.tableview
removed all images, but left the table view untouched.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With