Iphone:如何滚动到第2部分的第1个单元格,让第1部分的标题可见

时间:2011-01-04 20:00:33

标签: iphone uitableview uiscrollview scroll sectionheader

我有一个包含行和部分的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 个答案:

答案 0 :(得分:4)

我们正在继续前进。我发现这个方法基于凯文的想法。为了能够将动画设置为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之间无限循环...它循环,是的,但只有一次... 任何想法为什么? < / p>

答案 1 :(得分:2)

您可以获取所需行的矩形,然后减去上一部分标题的高度并滚动到该点。以下(未经测试)应该有效:

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

答案 2 :(得分:0)

我尝试了你的代码,它有效!!

对于循环问题,由于您正在设置偏移量(SetContentOffset),因此它与滚动无关。它不会调用scrollView委托。因此,scrollViewDidEndScrollingAnimation只会调用一次,这是从scrollToRowAtIndexPath调用的。