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

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

[tableView setContentOffset:CGPointZero animated:YES]; 

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

在iOS7中,整个屏幕UITableView和UIScrollView组件,默认情况下,调整内容和滚动指标插图,使一切正常工作。 但是,正如您已经注意到,CGPointZero不再代表将您带到视觉“顶部”的内容偏移量。

用这个代替:

 self.tableView.contentOffset = CGPointMake(0, 0 - self.tableView.contentInset.top); 

在这里,你不必担心,如果你有部分或行。 你也不要告诉表视图来定位第一行,然后想知道为什么它没有显示你的所有非常高的表头视图,等等。

尝试这个:

 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

根据@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); } } 

通过在这里的其他答案的帮助,我设法让它工作。 为了避免崩溃,我必须首先检查是否有一些部分。 如果第一部分没有行,则可以将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]; } } 
 var indexPath = NSIndexPath(forRow: 0, inSection: 0) self.sampleTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: true) 

要么

 self.sampleTableView.setContentOffset(CGPoint.zero, animated:false) 
 float systemVersion= [[[UIDevice currentDevice] systemVersion] floatValue]; if(systemVersion >= 7.0f) { self.edgesForExtendedLayout=UIRectEdgeNone; } 

viewDidLoad()方法中试试这个代码。

Swift 3

如果您有表格视图标题CGPointZero可能无法为您工作,但这总是伎俩滚动到顶部。

 self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: UITableViewScrollPosition.top, animated: false) 

你仍然可以使用scrollToRowAtIndexPath:来达到目的

我意识到这已被回答,但我只是想给另一个select:

 CGRect frame = {{0, 0},{1, 1}}; [self.tableView scrollRectToVisible:frame animated:YES]; 

这始终保证UITableView将滚动到顶部。 接受的答案是:

 NSIndexPath* top = [NSIndexPath indexPathForRow:NSNotFound inSection:0]; [self.tableView scrollToRowAtIndexPath:top atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

没有为我工作,因为我滚动到tableHeaderView而不是一个单元格。

使用scrollRectToVisible在iOS 6和7上工作。

这里是idStar的更新Swift 3语法的答案 :

 self.tableView.contentOffset = CGPoint(x: 0, y: 0 - self.tableView.contentInset.top) 

随着animation:

 self.tableView.setContentOffset(CGPoint(x: 0, y: 0 - self.tableView.contentInset.top), animated: true) 

在迅速我用:

 self.tableView.setContentOffset(CGPointMake(0, 0), animated: true) 

但@阿尔文·乔治的作品很棒

Swift 4 UITableViewExtension:

 func scrollToTop(animated: Bool) { if numberOfSections > 0 { let topIndexPath = IndexPath(row: NSNotFound, section: 0) scrollToRow(at: topIndexPath, at: .top, animated: animated) } }