Прокрутите вверх, нажав на строку состояния

#ios #objective-c #uiscrollview

#iOS #objective-c #uiscrollview

Вопрос:

Я просмотрел различные вопросы SO по этой теме и не нашел решения. У меня есть a UIViewController с a UITableView и a UICollectionView . Я хочу UICollectionView , чтобы прокручивать до самого верха, когда пользователь нажимает на него.

В документах говорится, что если у вас более одного подкласса UIScrollView — вам нужно установить для них значение no, а для UIScrollView, который вы хотите прокрутить до верха, значение yes.

Итак, я написал этот фрагмент кода, чтобы просмотреть все мои представления:

 for (UIScrollView *view in self.view.subviews) {
                    if ([view isKindOfClass:[UIScrollView class]]) {
                        view.scrollsToTop = NO;
                    }
                }

                self.collectionView.scrollsToTop = YES;
  

Таким образом, я уверен, что любой подкласс UIScrollView имеет свойство scrollsToTop, для которого установлено значение no.

Однако нажатие на строку состояния ничего не делает.

Может кто-нибудь сказать мне, чего мне здесь не хватает?

Спасибо

Комментарии:

1. Вы подтвердили, что ни одно из вложенных представлений не содержит подкласса UIScrollView ?

2. Код, который я опубликовал выше, проходит через все подвиды в моем представлении.

3. @Tander ваш код не проходит через все вложенные просмотры, могут быть вложенные просмотры прокрутки. Попробуйте рекурсивный метод.

Ответ №1:

Кажется, что вы только перебираете вложенные представления вашего основного представления. Ваш UITableView может быть вложен в другое представление. Попробуйте выполнить следующее;

 //in view did load
[self setScrollToTopFalse:self.view];
self.collectionView.scrollsToTop = YES;

-(void)setScrollToTopFalse:(UIView *)v
{
    for (UIView * v1 in [v subviews]) {
        if ([[v1 class]isSubclassOfClass:[UIScrollView class]]) {
            ((UIScrollView *)v1).scrollsToTop = NO;
        }
        [self setScrollToTopFalse:v1];
    }
}
  

Комментарии:

1. Спасибо, я попробую это в AM