Есть ли предложенный способ, как позволить UITableView начать отображаться в определенном месте? - PullRequest
2 голосов
/ 17 августа 2011

У меня есть приложение на основе навигации, подобное этому:

Существует табличное представление с обзором всех глав. Если пользователь нажимает на главу, я помещаю другой стек представления в стек, который показывает содержание книги. Это небольшая книга с небольшим количеством текста и изображений. Каждая глава отображается в одной ячейке, и я знаю точный contentOffset.y для каждой главы.

Проблема: я не могу начать с упомянутой главы.

В методе инициализации моего ReadingTableView я установил желаемый contentOffset следующим образом:

self.contentOffset = CGPointMake(self.contentOffset.x, targetContentOffsetY);

Я тоже пробовал:

[self setContentOffset:CGPointMake(self.contentOffset.x, targetContentOffsetY) animated:NO];

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

Ответы [ 3 ]

3 голосов
/ 17 августа 2011

Вы упомянули, что вы устанавливаете contentOffset в методе инициализации, поскольку UITableView на самом деле не загружается в вашем методе init, размер содержимого также не устанавливается. Вот почему анимация не дала эффекта.

Если вы используете UIViewController или UITableViewController, попробуйте метод "setContentOffset: animated:" в "viewDidAppear:" (осторожно со словом Did , а не Will ).

Также, «scrollToRowAtIndexPath: atScrollPosition: animated:» лучше для прокрутки UITableView.

P.S .: Анимация также может выглядеть как прыжок. Если ваша ячейка таблицы загружается очень очень медленно, если вы не уверены, в чем проблема, вы можете временно использовать пустую ячейку для теста.

3 голосов
/ 17 августа 2011

Установить contentOffset в viewWillAppear содержащего UIViewController.[UITableView scrollToRowAtIndexPath: также полезно, если вы пытаетесь сместить конкретную строку, а не просто количество пикселей.Опять же, стреляйте scrollToRowAtIndexPath через viewWillAppear или в любое время после того, как ваш tableView загрузит свои данные.

0 голосов
/ 17 августа 2011

Почему бы и нет:

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated

Дайте ему indexPath конкретной ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...