Прокрутки UITableView для обновления клеток делает прыжок


Я реализовал pull To refresh в табличном представлении, которое является подвидом к моему основному виду следующим образом:

UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.tableView;
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = self.refreshControl;

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

Должно выглядеть так:

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

На самом деле выглядит так после прыжка клеток:

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

1 2

1 ответ:

Для всех, кто может иметь эту проблему или проблему, подобную этой, я нашел способ заставить свиток обновляться, чтобы работать очень гладко и не вызывать проблем, которые у меня были. Я использую фактический UITableViewController теперь вместо встроенного UITableView, который помог с некоторыми проблемами прокрутки, но у меня все еще была проблема, когда вместо анимации закрытия значка обновления (таблица скользит вверх, чтобы покрыть вращающийся круг) он просто закрылся мгновенно и казался очень резким. Я положил свой освежитель логика на заднем плане, пусть она закончит, а затем закончит освежать. Моя структура кода выглядит следующим образом:

- (void)viewDidLoad {
    //set up refreshcontrol to call my refresh method
}

- (void)refresh {
    [self performSelectorInBackground:@selector(getUpdatedInfo) withObject:nil];
}

Выполняется обновление информации, и мой TableViewController является делегатом моего класса, который получает обновленную информацию. Когда вся информация получена и обновление завершено, я вызываю метод делегата в моем классе refreshing TableViewController, который помещает полученный массив в таблицу, обновляет таблицу и завершает обновление.

- (void)didFinishingUpdatingWithArray:(NSArray *)array {
    //configure table sections
    //Save the data
    [self.tableview reloadData];
    [self.refreshControl endRefreshing];
}