我有一个包含行和部分的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] 没有做到这一点,它隐藏了第一部分的标题。
答案 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调用的。