IPhone: как прокрутить 1 -ю ячейку 2 -го секции, предоставив заголовок 1 -й секции видимым

StackOverflow https://stackoverflow.com/questions/4597839

Вопрос

У меня есть 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] не выполняет работу, он скрывает заголовок первого раздела.

Это было полезно?

Решение

Мы движемся дальше. Я нашел этот метод на основе идеи Кевина. Чтобы иметь возможность установить анимацию на «да», я поймаю конец анимации, используя метод делегата 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];
}

Чувак к этому коду, процесс при анимации установлен на «да», должен зацикливаться на бесконечности между ScrollViewDidendScrollingAnimation и ShowfirSheaderline ... он зацикливается, да, но только один раз ... Есть идеи о том, почему?

Другие советы

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

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

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

Для вопроса о петле, поскольку вы устанавливаете смещение (SetContentOffSet), он не имеет ничего общего с свитком. Это не вызовет делегат Scrollview. Таким образом, ScrollViewDidendEndsCrollingAnimation будет вызвана только один раз, что было вызвано из ScrolltorOwatIndexPath.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top