如何在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) } }