iPhone SDK - Как программно прокрутить UITableView с анимацией? - PullRequest
12 голосов
/ 02 марта 2010

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

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

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

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

Спасибо за любую помощь.

Ответы [ 4 ]

23 голосов
/ 02 марта 2010

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

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

}

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

if(!isInitialized){
   isInitialized = YES;
   ....
}
5 голосов
/ 02 марта 2010

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

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

0 голосов
/ 23 ноября 2015

Я знаю, что может быть слишком поздно, но, возможно, это помощь другим, теперь вы можете прокручивать таблицу только с помощью [tableView scrollsToTop].

0 голосов
/ 02 марта 2010

У меня есть два предложения для расследования:

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

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

...