Iphone: Как прокрутить до 1-й ячейки 2-го раздела, чтобы сделать видимым заголовок 1-го раздела - PullRequest
2 голосов
/ 04 января 2011

У меня есть UITableView со строками и разделами.Я бы хотел прокрутить до первого элемента второго раздела, чтобы заголовок первого раздела был виден.Например, если я прокрутил список вручную до достижения этого состояния.

---- TOP OF SCREEN ----
Header of first section
Header of the second section
cell 1
cell 2
cell 3
Header of the third section
cell 1
cell 2
...

scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 1] не выполняет работу, он скрывает заголовок первого раздела.*

Ответы [ 3 ]

4 голосов
/ 06 января 2011

Мы идем дальше.Я нашел этот метод на основе идеи Кевина.Чтобы иметь возможность установить для анимированного YES, я улавливаю конец анимации, используя метод делегата UIScrollView.Оно работает.Но любое решение, которое поможет не делать 2 анимации, будет с благодарностью. Есть идеи о том, как это сделать?

- (IBAction) scrollToToday:(BOOL)animate {
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] atScrollPosition:UITableViewScrollPositionTop animated:animate];
    if (animate == NO) [self showFirstHeaderLine:NO];
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
    [self showFirstHeaderLine:YES];
}

- (void) showFirstHeaderLine:(BOOL)animate {
    CGRect headerRect = [self.tableView rectForHeaderInSection:1];
    CGPoint scrollPoint = headerRect.origin;
    scrollPoint.y -= headerRect.size.height;
    [self.tableView setContentOffset:scrollPoint animated:animate];
}

Из-за этого кода процесс, когда для анимированного установлено значение YES, должен бесконечно зацикливаться между scrollViewDidEndScrollingAnimation и showFirstHeaderLine ... Это циклы, да, но только один раз ... Есть идеи о том, почему?

2 голосов
/ 05 января 2011

Вы можете взять прямоугольник для нужной вам строки, затем вычесть высоту заголовка предыдущего раздела и прокрутить до этой точки.Должно работать что-то вроде следующего (непроверенного):

CGRect rowRect = [table rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];
CGRect headerRect = [table rectForHeaderInSection:0];
rowRect.origin.y -= headerRect.size.height;
rowRect.size.height += headerRect.size.height;
[table scrollRectToVisible:rowRect animated:YES]; // UITableView is a subclass of UIScrollView
0 голосов
/ 12 августа 2015

Я попробовал ваш код, и он работает !!

Для вопроса о цикле, поскольку вы устанавливаете смещение (SetContentOffset), оно не имеет никакого отношения к прокрутке.Это не вызовет делегат scrollView.Поэтому scrollViewDidEndScrollingAnimation будет вызываться только один раз, который вызывается из scrollToRowAtIndexPath.

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