2010-07-09 2 views
0

Я должен установить начальное положение прокрутки моего UITableView к строке, отличной от первой (например, в первой строке второго раздела).Странное поведение UITableView scrollToRowAtIndexPath:

На мой взгляд контроллера viewDidLoad Я пишу:

- (void)viewDidLoad 
{ 
    // self.view is a container view, not UITableView 
    [super viewDidLoad]; 
    [table scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] 
     atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
} 

Когда экран нагрузки, положение прокрутки не установить сразу. В противном случае, если для параметра анимированного установлено значение YES, позиция устанавливается сразу без анимации. Что происходит?

Каков правильный способ установки начального положения строки для UITableView?

ответ

0

Лучшее место должно быть ViewDidAppear. Кроме того, вы должны вызвать метод прокрутки в cellWillDisplay, чтобы убедиться. Не забудьте проверить indexPath перед вызовом метода прокрутки

0

Просто выстрел в темноте, но попытался ли вы вставить этот код в viewDidAppear {}?

+0

Точно такой же результат. – alexey

0

Это не будет работать в viewDidLoad или viewWillAppear, поскольку таблица, скорее всего, не были заселены, то (по крайней мере, это не было в моем случае)

Попробуйте положить его в NSTimer вместо когда-то ваш стол загружает и вызывает его тогда.

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

+0

Скроллинг работает даже в режиме просмотраDidLoad, но он прокручивается не сразу. NSTimer - это своего рода хак. Есть ли обратный вызов для таблицы, загружающей событие? – alexey

+0

Правильно, он не будет прокручиваться, пока данные не будут доступны для прокрутки. В проектах, где у вас есть большое количество данных или изображений таблицы, это может занять 2 секунды или более, и к тому времени уже был вызван 'viewDidLoad'. К сожалению, в методе 'UITableViewDelegate' ничего не происходит, когда таблица загружается. Вы можете найти более подробную информацию здесь: http://stackoverflow.com/questions/1483581/get-notified-when-uitableview-has-finished-asking-for-data – iwasrobbed

Смежные вопросы