如何在IOS7 UITableView中滚动到顶部?

Mar*_*son 43 uitableview ios ios7

在IOS6中,我有以下代码滚动到UITableView的顶部

[tableView setContentOffset:CGPointZero animated:YES];
Run Code Online (Sandbox Code Playgroud)

在IOS7中,这不再起作用了.表视图不会完全滚动到顶部(但几乎).

idS*_*tar 127

在iOS7中,默认情况下,整个屏幕UITableView和UIScrollView组件调整内容并滚动指示符插入,以使一切正常.但是,正如您已经注意到CGPointZero不再代表将您带到视觉"顶部"的内容偏移.

请改用:

self.tableView.contentOffset = CGPointMake(0, 0 - self.tableView.contentInset.top);
Run Code Online (Sandbox Code Playgroud)

在这里,您不必担心是否有部分或行.您也不会告诉Table View定位第一行,然后想知道为什么它没有显示所有非常高的表头视图等.

  • 对不起,回头看我的评论,我不清楚我的意思."setContentOffset"是一个实例方法,而不是类方法,因此你可以像这样使用它:[self.tableView setContentOffset:CGPointMake(0,0-self.tableView.contentInset.top)animated:YES]; (8认同)
  • 我喜欢你的方法.如果你使用[UITableView setContentOffset:animated:]更好,因为你可以设置为该位置的动画. (7认同)

Har*_*nan 23

试试这个:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
Run Code Online (Sandbox Code Playgroud)

  • 当表没有行时,这会导致错误. (8认同)
  • @MorbZ:只需使用`if`条件来检查表是否有任何行. (3认同)

cas*_*ash 22

基于@Markus Johansson接受的答案,这里是Swift代码版本:

func scrollToTop() {
    if (self.tableView.numberOfSections > 0 ) {
        let top = NSIndexPath(row: Foundation.NSNotFound, section: 0)
        self.tableView.scrollToRow(at: top as IndexPath, at: .top, animated: true);
    }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*son 17

通过这里的一些其他答案的帮助,我设法让它工作.为了避免崩溃,我必须首先检查是否有一些部分.如果第一部分没有行,则NsNotFound可用作行索引.希望这应该是放在UITableViewController中的通用函数:

-(void) scrollToTop
{
    if ([self numberOfSectionsInTableView:self.tableView] > 0)
    {
        NSIndexPath* top = [NSIndexPath indexPathForRow:NSNotFound inSection:0];
        [self.tableView scrollToRowAtIndexPath:top atScrollPosition:UITableViewScrollPositionTop animated:YES];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这几乎与我发布的答案相似.所以你应该接受这个答案.无论如何,如果您的问题得到解决,请接受答案,以便对其他人有所帮助. (8认同)