Как удалить все подзоны из UIScrollview?
Удалить все подпрограммы из UIScrollView?
Ответ 1
Пусть scrollView
является экземпляром UIScrollView
.
В Objective-C это довольно просто. Просто позвоните makeObjectsPerformSelector:
, например:
Objective-C:
[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
В Swift вы не получаете доступ к рабочему столу, поэтому вы должны сами обрабатывать итерацию.
Swift:
Краткая версия отсюда:
scrollview.subviews.map { $0.removeFromSuperview() }
Более описательный способ сделать это (из здесь) принимает scrollview.subviews
:
let subviews = self.scrollView.subviews
for subview in subviews{
subview.removeFromSuperview()
}
Ответ 2
Я думаю, вам просто нужно быть осторожным и не удалять полосы индикаторов прокрутки.
Код, данный Адамом Ко, короткий и изящный, но он может удалять горизонтальные и вертикальные индикаторы прокрутки.
Я обычно делаю
for (UIView *v in scrollView.subviews) {
if (![v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
Допустим, что у вас нет UIImageView, добавленного в свиток вручную.
Ответ 3
В дополнение к Ricardo de Cillo, в моем случае у меня был табличный вид, который имел изображения в подзаголовках, которые я хотел удалить.
for (UIView *v in self.tableview.subviews) {
if ([v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
Удаление! в команде if и смените scrollview
на self.tableview
удаленные все изображения, но не просмотрели табличный вид.
Ответ 4
Если вы хотите удалить uiimageviews в scrollview.subviews, а также хотите сохранить вертикальные и горизонтальные индикаторы. Вы можете установить специальный "тег" для идентификации представлений и исключить вертикальные и горизонтальные индикаторы, по умолчанию теги которых равны 0.
Ответ 5
Дополняя краткую версию Swift из предыдущего ответа (Swift 3.0 готов):
_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }