Прокрутка UITableView для обновления заставляет ячейки прыгать

Я реализовал pull для обновления в табличном представлении, которое является подвидом моего основного представления, например:

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;

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

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

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

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

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


person Made2k    schedule 17.10.2013    source источник
comment
пожалуйста, опубликуйте код о том, как вы на самом деле обновляете ячейки. В чем смысл этой строки: `tableViewController.refreshControl = self.refreshControl;'   -  person Wladek Surala    schedule 18.10.2013
comment
я чувствую твою боль. Я почти уверен, что это связано с UITableViewController, но я не заставил элемент управления обновлением работать должным образом в обычном UIViewController (запутались contentInsets). Есть ли у вас какие-либо обновления по этому поводу?   -  person manmal    schedule 06.11.2013
comment
@manmal Я заставил его работать, по сути, выполняя некоторую логику обновления в фоновом режиме. Я также переключился на использование UITableViewController вместо встроенного UITableView. Я опубликую ответ с тем, как теперь выглядит моя структура кода, которая, похоже, устранила проблемы.   -  person Made2k    schedule 07.11.2013


Ответы (1)


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

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

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

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

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