2016-02-29 6 views
2

У меня есть UITableViewController и когда пользователь прокручивает к вершине, я хочу, чтобы добавить кучу клеток выше первой ячейки, не затрагивая текущую позицию прокрутки (так же, как Шеззаде)не setContentOffset работать после обновления данных

I знаю, что я могу использовать insertRowsAtIndexPaths, чтобы сделать это без перезагрузки данных, но я просто хочу сделать это как можно проще. Поэтому я переписываю данные и вызываю reload, а затем вызываю setContentOffset, но независимо от того, для чего я установил смещение, таблица всегда возвращается к вершине.

// in an NSNotification handler 
//... 
dispatch_async(dispatch_get_main_queue(), ^{ 

    // get old content height 
    CGSize oldContentSize = self.tableView.contentSize; 
    NSLog(@"old content height: %f", oldContentSize.height); 

    // update tableView data 
    self.messages = updatedMessages; 
    [self.tableView reloadData]; 

    // get new content height 
    CGSize newContentSize = self.tableView.contentSize; 
    NSLog(@"new content height: %f", newContentSize.height); 

    // move to user scroll position 
    CGPoint newContentOffset = CGPointMake(0, newContentSize.height - oldContentSize.height); 
    [self.tableView setContentOffset:newContentOffset]; 
}); 

Когда я запускаю это я получаю:

old content height: 557.765625 
new content height: 1249.050781 

но Tableview возвращается к вершине вместо поддержания своей позиции прокрутки.

Я обнаружил, что если я позвоню [self.tableView setContentOffset:newContentOffset animated:YES]; Он всегда прокручивается в правильное положение, но движение неприемлемо.

Как сохранить положение прокрутки после перезагрузки данных tableView?

Я посмотрел на них:

setContentOffset only works if animated is set to YES

UIScrollView setContentOffset: animated: not working

UITableView contentOffSet is not working properly

, но их решения не работают в моем случае. не

+1

Как насчет [self.tableView setContentOffset: newContentOffset анимированные: NO] ;; –

+0

, который сработал. lol – Cbas

+0

ничего не сказал: | –

ответ

1

Попробуйте

[self.tableView setContentOffset:newContentOffset animated:NO] 
Смежные вопросы