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

Не удается получить scrollsToTop, работающий на iOS7

Я ориентирую iOS7 в своем последнем приложении, и нажатие на строку состояния не похоже на прокрутку таблицыView или collectionView вверху.

Я установил self.tableView.scrollsToTop = true и до сих пор ничего не происходит.

Я знаю, что Apple значительно изменила строку состояния в iOS7, но изменили ли эти изменения функциональность scrollsToTop?

Обновление

В ответ на комментарий в одном из ответов я протестировал, чтобы убедиться, что мой просмотр коллекции действительно единственный scrollView на экране, и это было:

(lldb) po [self.view recursiveDescription]
<UIView: 0x1092ddf0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x109357e0>>
   | <UICollectionView: 0x11351800; frame = (0 0; 320 568); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x10966080>; layer = <CALayer: 0x109623a0>; contentOffset: {0, -64}> collection view layout: <UICollectionViewFlowLayout: 0x10940a70>
   |    | <UIImageView: 0x10965fa0; frame = (0 564.5; 320 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x10965ee0>> - (null)
   |    | <UIImageView: 0x10948f60; frame = (316.5 561; 3.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x10966030>> - (null)

Обновление # 2

Не уверен, если это имеет значение, но я использую стандартный iOS7 NavigationController, где navigationBar прозрачен и применяет размытие к моей коллекции /tableViews при прокрутке вниз.

Обновление # 3

Выяснил это. Оказывается, у меня на экране было несколько прокрутки. Мое приложение имеет меню с левым ящиком под основной частью приложения, и в этом меню есть таблицаView для параметров. Я просто установил self.menuTable.scrollsToTop = false, и все работало так, как ожидалось, в остальной части приложения. Не нужно было реализовывать методы делегирования прокруткиView или что-то еще.

4b9b3361

Ответ 1

Есть ли у вас более одного вида просмотра/просмотра/просмотра вида прокрутки на экране? Если это так, только один из них может scrollsToTop установить на YES, в противном случае iOS7 не будет прокручивать ни один из них вверху.

Вы также можете реализовать метод UIScrollViewDelegate scrollViewShouldScrollToTop: и вернуть YES, если пройденное в прокрутке представление равно тому, которое вы хотите прокрутить вверху:

- (BOOL) scrollViewShouldScrollToTop:(UIScrollView*) scrollView {
    if (scrollView == self.myTableView) {
        return YES;
    } else {
        return NO;
    }
}

Ответ 2

Короткий ответ: в iOS7 нет ничего другого. Пока загружено не более одного загруженного UIScrollView, ваш tableView или collectionView будут прокручиваться вверх, когда пользователь удаляет строку состояния. Ключ здесь загружен; другой scrollView не обязательно должен быть на экране, чтобы конфликтовать с другим scrollView, который есть.

Скользкие ящики слева/справа очень популярны в наши дни, и это стало причиной моей проблемы. У меня есть меню, содержащее мои параметры навигации, и все они хранятся в UITableView. Я должен был убедиться, что я установил menuTable.scrollsToTop = false, прежде чем я смогу заставить все работать в других частях моего приложения.

Ответ 3

Моя проблема заключалась в том, что у меня был UITextView с scrollsToTop установлен на YES, поэтому мой UITableView не отвечал на жест. Короче говоря, проверьте все остальные прокручиваемые виды.

Ответ 4

для других:

Помните, что просмотр прокрутки, который вы ищете, также может быть UIWebView.. не только UITableView. Еще одна важная вещь заключается в том, что это касается не только VISIBLE scrollViews, но и scrollviews LOADED.

Если вы не найдете scrollView, вы всегда можете вставьте тестовую таблицу UITableView, сразу после запуска приложения, проверьте, прокручивается ли она вверх, а затем загружать все больше и больше просмотров, пока тестовая таблица не перестанет прокручиваться вверх.

Ответ 5

Если ваши ячейки таблицы динамические, удалите следующее:

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
    return YES;
}

Создайте новую функцию следующим образом:

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

Вызвать функцию выше в - (void)viewDidLoad

[self disableScrollsToTopPropertyOnAllSubviewsOf:self.view];

Теперь включите ScrollsToTop для представления таблицы следующим образом:

[myTableView setScrollsToTop:YES];

Ответ 6

Это всегда работает для меня:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];