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

Заголовки разделов в UITableView при изменении вставки таблицы

Я внедрил "Pull to refresh" в моем TableView, как iPhone приложение Twitter или Facebook.
В моем табличном представлении есть разделы с заголовками. Когда tableView находится в "режиме обновления", поэтому, когда я вытащил tableView для обновления, я установил contentInset tableView для отображения tableView определенным образом. В этот момент, если я нажимаю tableView вверх, заголовки UITableView больше не прокручиваются вверху UITableView. Смотрите следующие скриншоты:

screenshot 1

screenshot 2

Как я могу исправить это, чтобы прокручивать заголовки, как ожидалось?

Спасибо!

4b9b3361

Ответ 1

У меня была такая же проблема при использовании contentInset и исправлена ​​ее добавлением кода в scrollViewDidScroll: для динамического обновления содержимого в течение "загрузки".

if( refreshState == kLoading ) {
    if( scrollView.contentOffset.y >= 0 )
        scrollView.contentInset = UIEdgeInsetsZero;
    else
        scrollView.contentInset = UIEdgeInsetsMake( MIN( -scrollView.contentOffset.y, kPullHeight ), 0, 0, 0 );
}       

Ответ 2

При этом обычно я использую заголовок таблицы в UITableView:

@property(nonatomic, retain) UIView *tableHeaderView

... вместо contentInsets. Было много ошибок с contentInsets вплоть до iOS 2.x дней, и я не уверен, что они все исправлены. Есть ли причина, по которой вы не можете использовать заголовок таблицы?

Ответ 3

Попробуйте этот способ, чтобы добавить контроллер просмотра.

  • Создайте контроллер табличного представления и добавьте его в качестве дополнительного представления существующего контроллера представления.
  • Затем назначьте контроллеры табличного представления и обновления в свойства контроллера таблицы.

    UITableViewController *newTableViewController = [[UITableViewController alloc] init];
    newTableViewControler.tableView = <yourTableView>;
    
    <yourRefreshController> = [[UIRefreshControl alloc] init];
    [<yourRefreshController> addTarget:self
                                action:@selector(refreshTableView:)
                      forControlEvents:UIControlEventValueChanged];
    
    newTableViewController.refreshControl = _chatListRefreshControl;
    [self addChildViewController:newTableViewController];