#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