我怎样才能获得UITableView的滚动位置,所以我可以保存它?

有什么办法找出哪个UITableViewCell是在滚动窗口的顶部?

我想获取当前的滚动位置,以便在应用程序退出时保存它。 当应用程序开始时,我想滚动到上次退出时的位置。

您可以通过查看其contentOffset属性轻松获取表视图的确切偏移量。 对于垂直滚动,请看:

 tableView.contentOffset.y; 

只有当您知道所有表格视图项目的大小时,接受的解决scheme才有效。 随着自动resize/估计大小并不总是如此。

一种替代方法是保存第一个可见的项目并滚动到它。

你可以得到第一个可见的项目indexPath:

 savedIndex = tableView.indexPathsForVisibleRows?.first 

然后通过执行以下操作滚动到:

 tableView.scrollToRowAtIndexPath(savedIndex, atScrollPosition: .Top, animated: false) 

确保你可以加载viewWillAppear而不是viewDidLoad(经testing的iOS 9)。 ViewWillAppear是当视图完成布局时 – 结果有差异。

 -(void) viewWillAppear:(BOOL)animated { NSUserDefaults *lightData = [NSUserDefaults standardUserDefaults]; [self.tableView setContentOffset:CGPointMake(0, [lightData floatForKey:@"yValue"])]; } -(void) viewWillDisappear:(BOOL)animated { NSUserDefaults *lightData = [NSUserDefaults standardUserDefaults]; [lightData setFloat:self.tableView.contentOffset.y forKey:@"yValue"]; [lightData synchronize]; }