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

Автоматическая прокрутка вверх не работает в UITableView

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

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

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

Я думаю, что все правильно подключено (datasource, delegate,...). У меня есть аналогичный контроллер, где все работает. Единственная разница, по-видимому, в том, что WebView, который отсутствует в контроллере представления, где работает откат и прокрутка к вершине...

Любые идеи?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Возможно, вы добавили некоторое представление в свою иерархию представлений, которая является 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];

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

Ответ 3

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

На iPhone жест жестов в прокрутке не влияет, если есть больше чем один экран прокрутки на экране с параметрами свитковToTop на YES.

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

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

Ответ 4

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

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

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

Ответ 5

Быстрый вариант ответа opyh. Поднимите его!

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)
    }
}

Ответ 6

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

[myTextView setScrollsToTop:FALSE];

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

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

Ответ 7

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

Ответ 8

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