У меня есть messagesTableView, который отображается в ViewController в NavigationController.
В viewDidLoad:
[self.messagesTableView reloadData];
NSInteger t;
if ((t = [self.messagesTableView numberOfRowsInSection:0]) > 0) {
NSLog(@"ViewDidLoad: number of rows:%d Messages Count:%d", t, [messages count]);
NSIndexPath* ip = [NSIndexPath indexPathForRow: (t-1) inSection:0];
[self.messagesTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionNone animated:NO];
}

и в viewDidAppear:
[self.messagesTableView reloadData];
NSInteger t;
if ((t = [self.messagesTableView numberOfRowsInSection:0]) > 0) {
NSLog(@"ViewDidAppear: number of rows:%d Messages Count:%d", t, [messages count]);
NSIndexPath* ip = [NSIndexPath indexPathForRow: (t - 1) inSection:0];
[self.messagesTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionTop animated:NO];
}

scrollToRowAtIndexPath в viewDidLoad прокручивает до второй последней строки вместо последней строки, тогда как та же функция в viewDidAppear прокручивает до последней строки. Единственная проблема заключается в том, что для вызова функции viewDidAppear требуется некоторое время.
но почему он ведет себя по-разному в viewDidLoad и viewDidAppear (NSLog печатает одинаковые значения для обоих)?