Вызов setNeedsDisplay
просто перерисовывает ваше представление прокрутки, а не фактически удаляет содержимое внутри него.
Как вы обнаружили, вызов removeFromSuperview
для всех подпредставлений представления прокрутки приведет к вашемуполосы прокрутки иногда также удаляются (не очень).
Существует несколько подходов к этому: во-первых, поддерживать отдельный массив, содержащий все представления, которые вы добавили в представление прокрутки.Затем вы можете просто перебрать этот массив.На мой взгляд, это, вероятно, лучший подход.
Другой, немного хакерский способ - это тестировать представления при их итерации:
for (UIView *view in self.contentView.subviews)
{
if (![view isKindOfClass:[UIImageView class]])
[view removeFromSuperview];
}
Поскольку полосы прокрутки сами по себе являютсяПодкласс UIImageView
это не удалит их.Но опять же, если вы сами используете представления изображений, они также не будут удалены, и нет никакой гарантии, что в будущих версиях iOS они останутся представлениями изображений.
Намного лучше пойти с моим первым подходом ипросто держите массив со всеми добавленными вами представлениями.