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

Прокрутите вверх страницы UITableView, коснувшись строки состояния

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

4b9b3361

Ответ 1

Вы получите это бесплатно, но вы должны проверить, что атрибут scrollsToTop вашего UITableView равен YES.

Если это НЕ работает, если у вас есть объект UIScrollView (или потомок, подобный UITextView), встроенный в другой класс UIScrollView (например, UITableView). В этом случае установите scrollsToTop для встроенного класса UIScrollView в значение NO. Затем будет работать поведение tap-the-status-bar.

Ответ 2

Если вы пришли из Google и вам нужен полный контрольный список:

  • Убедитесь, что вы установили scrollsToTop = YES (по запросу Mark) в свой UITableView
  • Убедитесь, что вы установили scrollsToTop = NO во всех других UITableViews/UIScrollViews/UITextViews в своем окне, чтобы они не перехватывали щелчок. Я обнаружил, что распечатываю все виды в моем окне много раз, чтобы отладить это...
  • Убедитесь, что ваш вид таблицы находится в 0/0 (координаты x/y) в окне - это то, как система знает, что она должна передать сообщение

Ответ 3

Используя информацию, приведенную в других ответах, я добавил следующий код в мой UITableViewController, чтобы он работал:

- (void)viewDidLoad
{
    [super viewDidLoad];

    for (UITextView *view in self.view.subviews) {
        if ([view isKindOfClass:[UITextView class]]) {
            view.scrollsToTop = NO;
        }
    }

    self.tableView.scrollsToTop = YES;
}

Это просматривает все представления в иерархии UITableViewController и отключает scrollsToTop во всех UITextView, которые перехватывают событие touch. Затем, обеспечив, чтобы tableView все еще получал прикосновение.

Вы можете изменить это, чтобы перебирать другие UITableViews/UIScrollViews/UITextView, которые также могут перехватываться.

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

Ответ 4

У меня была та же проблема, но была исправлена ​​следующими шагами:

  • Установите scrollsToTop = YES для просмотра таблицы, которую вы хотите прокрутить вверх.
  • установить scrollsToTop = NO для всех других представлений таблиц или коллекций или прокрутки.
  • Если какая-либо из вашей ячейки tableview имеет представление коллекции. Удостоверьтесь, что вы также устанавливаете scrollsToTop NO для представления коллекции.

Если контроллер вашего вида/контроллер навигации добавлен в качестве подчиненного объекта на другом контроллере представления, убедитесь, что вы установили его как дочерний контроллер.

Ответ 5

Как сказал Марк, у вас может быть только один подкласс UIScrollView (обычно это представление таблицы), у которого свойство scrollsToTop установлено в TRUE. Вероятно, у вас есть другие, как правило, UITextView на ваш взгляд. Просто установите для свойства scrollsToTop значение FALSE, и вам будет хорошо.

Ответ 6

Я знаю, что это довольно старый, но надеюсь, что это может помочь. Следуя тому, что сказал @MarkGranoff, scrollsToTop не работает, если более одного UIScrollView или его подклассов имеет значение YES (значение по умолчанию), проверка работоспособности, вероятно, стоит проверить, кто на самом деле испортил это поведение. Простой метод, приведенный ниже, над надзорами вашего представления и регистрирует значение scrollsToTop для всего UIScrollView в вашем представлении. Предпочтительно вызывать в вашем методе viewDidAppear.

- (void)checkForScrollViewInView:(UIView *)view {
    for (UIView *subview in [view subviews]) {
        if ([subview isKindOfClass:[UIScrollView class]]) {
            NSLog(@"scrollsToTop enabled: %i in scroll view %@", ((UIScrollView *)subview).scrollsToTop, subview);
        }
        if (subview.subviews.count > 0) {
            [self checkForScrollViewInView:subview];
        }
    }
}

Это действительно код отладки. Когда вы найдете значение scrollsToTop для каждого из подклассов UIScrollView, убедитесь, что только один из них установлен в YES.

Ответ 7

В заголовочном файле UIScrollView:

//Когда пользователь отбирает строку состояния, вид прокрутки под касанием, который ближе всего к строке состояния, будет прокручиваться вверх, но только если его свойство scrollsToTop равно YES, его делегат не возвращает NO из shouldScrollViewScrollToTop, и он еще не на вершине. // На iPhone мы выполняем этот жест только в том случае, если есть один экранный просмотр прокрутки с scrollsToTop == YES. Если найдено более одного, ни один из них не будет прокручиваться.

Ответ 8

Например, если у вас есть представление таблицы и просмотр прокрутки, например теги, такие как

введите описание изображения здесь

вы должны сделать что-то вроде этого в viewDidLoad

self.tableView.scrollsToTop = true
self.tagsView.scrollsToTop = false