scrollToRowAtIndexPath
должно работать.
В viewWillAppear:
попробуйте это:
[theTableView reloadData];
NSIndexPath* ip = [NSIndexPath indexPathForRow:rowNumberHere inSection:sectionNumberHere];
[theTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionTop animated:NO];
rowNumberHere
- это номер строки в источнике данных, к которому вы хотите перейти.
atScrollPosition
- это только одно из значений в перечислении UITableViewScrollPosition
, которое может определить, где на экране появится номер нужной вам строки. Однако, в зависимости от количества строк и того, к какой строке вы прокручиваете, это может не иметь значения.
Установка reloadData:
позволяет избежать исключения, если данные еще не загружены в viewWillAppear:
. Если вы введете scrollToRowAtIndexPath
в viewDidAppear:
, вам не понадобится reloadData:
, но вы увидите, что стол немного подпрыгнет, что, как вы говорите, не нужно.
Edit:
@ Теория, попробуйте изменить код следующим образом ...
[tableView reloadData];
int lastRowNumber = [tableView numberOfRowsInSection:0] - 1;
NSIndexPath* ip = [NSIndexPath indexPathForRow:lastRowNumber inSection:0];
[tableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionTop animated:NO];
Обратите внимание, numberOfRowsInSection
возвращает количество строк, а не номер последней строки (то есть количество строк - 1).