iPhone SDK - Как прокрутить UITableView программно с анимацией?

Как я прокрутил бы UITableView к определенной позиции с анимацией?

В настоящее время я использую этот код для перехода к позиции:

 //tableController -> viewDidLoad
 [self.tableView reloadData];
 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
 [self.tableView scrollToRowAtIndexPath:indexPath
                       atScrollPosition:UITableViewScrollPositionTop
                               animated:YES];

Проблема с этим кодом, что таблица переходит право на правильное положение без любой анимации. Там какой-либо путь состоит в том, чтобы включить анимацию или установить продолжительность?

Спасибо за любую справку.

12
задан dan 1 March 2010 в 22:25
поделиться

3 ответа

Попробуйте закомментировать вызов reloadData . Если я правильно понимаю ваш вопрос и вы используете viewDidLoad , вам все равно не нужно его вызывать.

Кроме того, если вы только что закончили нажимать на контроллер представления, вы не получите анимированной прокрутки. Вам нужно будет вставить задержку (я обнаружил, что четверть секунды хорошо работает) между моментом вызова viewDidLoad и началом вашей анимации.

5
ответ дан 2 December 2019 в 05:27
поделиться

У меня есть два предложения, которые вы можете изучить:

  1. Вы запускаете приложение на симуляторе или на самом iPhone? Я заметил, что некоторые анимации в симуляторе ведут себя иначе.

  2. Возможно ли, что вы вызываете scrollToRowAtIndexPath: atScrollPosition: анимированный дважды в быстрой последовательности? Это может «сбить с толку» анимацию. Вы должны вызывать эту функцию только один раз при обработке данного события.

0
ответ дан 2 December 2019 в 05:27
поделиться

У меня отлично работает:

-(void) viewDidAppear:(BOOL)animated{
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:n inSection:0];
    [self.tableView scrollToRowAtIndexPath:indexPath
                    atScrollPosition:UITableViewScrollPositionTop
                            animated:YES];

}

Чтобы убедиться, что это вызывается только один раз, вы можете выполнить проверку следующим образом:

if(!isInitialized){
   isInitialized = YES;
   ....
}
23
ответ дан 2 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: