Подтвердить что ты не робот

Удалить все подпрограммы из UIScrollView?

Как удалить все подзоны из UIScrollview?

4b9b3361

Ответ 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() }