Автоматическая прокрутка вверх не работает в UITableView - PullRequest
19 голосов
/ 12 ноября 2010

обычно при нажатии на верхнюю часть экрана табличное представление прокручивается до самого верха.По какой-то причине это не работает ни в одном из моих контроллеров представления.

Иерархия выглядит следующим образом:

UIView
-> WebView
-> TableView
-----> SearchBar
SearchDisplayController.

Я думаю, что все правильно подключено (источник данных, делегат, ...).У меня есть аналогичный контроллер вида, где все работает.Кажется, единственное отличие - это WebView, которого нет в контроллере представления, где работает тап-и-прокрутка вверх ...

Есть идеи?

С уважением, Саша

Ответы [ 8 ]

30 голосов
/ 14 апреля 2011

Возможно, вы добавили какое-то представление в иерархию представлений, которое представляет собой UIScrollView или содержит представления прокрутки (например, UIWebView или UITextView).Когда вы нажимаете на строку состояния, iOS ищет самый верхний вид прокрутки с scrollsToTop, установленным на YES, и прокручивает его до верха.

Добавьте это к своему классу:

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

…и позвоните

[self disableScrollsToTopPropertyOnAllSubviewsOf:myAddedSubview];

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

27 голосов
/ 13 ноября 2010

Вам необходимо отключить scrollsToTop на всех, кроме одного, прокручиваемых видах. Поскольку UITableView является потомком UIScrollView, это легко сделать. Однако, если вы хотите отключить его в веб-просмотре, это немного сложнее. Это похоже на работу:

[webView.subviews objectAtIndex:0].scrollsToTop = NO;

Но это немного сомнительно, так как он копается в недокументированных частях веб-обзора. Он может перестать работать, если Apple решит переставить подпредставления.

4 голосов
/ 08 января 2014

Не знаю, что Apple курила, но по дизайну поведение на iPhone заметно отличается от iPad. Документация Apple содержит примечание "Особые пожелания" следующим образом ...

На iPhone жест прокрутки вверх не действует, если есть еще чем один вид прокрутки на экране, для которого scrollsToTop имеет значение YES.

Так что на iPhone вы должны убедиться, что есть только один UIScrollView (или UITableView / UICollectionView / UIWebView и т. Д.), Который имеет scrollsToTop = YES.

Поскольку scrollsToTop по умолчанию имеет значение YES, вам необходимо явно установить scrollsToTop = NO для UIScrollView, которые вы не хотите прокручивать, когда пользователь нажимает на строку состояния.

3 голосов
/ 08 февраля 2015

Быстрый вариант ответа Опых. Голосуй за него!

func disableScrollsToTopPropertyOnAllSubviewsOf(view: UIView) {
    for subview in view.subviews {
        if let scrollView = subview as? UIScrollView {
            (scrollView as UIScrollView).scrollsToTop = false
        }
        self.disableScrollsToTopPropertyOnAllSubviewsOf(subview as UIView)
    }
}
3 голосов
/ 12 ноября 2010

Очевидно, что если в контроллере представления имеется несколько прокручиваемых представлений (в вашем случае WebView и TableView), «коснуться строки состояния для прокрутки вверх» отключается.

http://twitter.com/drance/status/2448035250438144

(Мэтт Дранс (Matt Drance) - бывший евангелист-разработчик iPhoneOS и рок-звезда по разработке для iOS)

1 голос
/ 15 февраля 2013

Я просто хотел добавить к этому, если вы используете UITextView, это не подпредставления, которые нуждаются в корректировке scrollsToTop, это фактический UITextView, короче говоря, вам нужен этот код:

[myTextView setScrollsToTop:FALSE];

Это должно решить проблему ( дополнительно, функция 'disableScrollsToTopPropertyOnAllSubviewsOf' не работает на UITextViews ).

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 26 марта 2012

Установите scrollsToTop = NO во всех видах прокрутки в представлении, кроме того, которое вы хотите прокрутить вверх. Это помогает системе найти правильное представление прокрутки.

0 голосов
/ 06 апреля 2011

У меня была эта проблема только с таблицей в NIB. Очень расстраивало, пока я не вспомнил, что программно добавил UITextView в качестве заголовка табличного представления. scrollsToTop = NO в UITextView добился цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...