Автоматическая прокрутка вверх не работает в UITableView
обычно, когда вы нажимаете верхнюю часть экрана, столбец прокручивается до самого верха. По какой-то причине это не работает в одном из моих контроллеров.
Гирархия выглядит следующим образом:
UIView
- > WebView
- > TableView
----- > SearchBar
SearchDisplayController.
Я думаю, что все правильно подключено (datasource, delegate,...). У меня есть аналогичный контроллер, где все работает. Единственная разница, по-видимому, в том, что WebView, который отсутствует в контроллере представления, где работает откат и прокрутка к вершине...
Любые идеи?
С уважением,
Sascha
Ответы
Ответ 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
во всех видах прокрутки в представлении, кроме тех, которые вы хотите прокрутить вверх. Это помогает системе найти правильный вид прокрутки.