如何获得 UITableView 滚动条位置以便保存它?

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

我想得到当前的滚动位置,以便我可以保存它时,应用程序退出。当应用程序启动时,我想滚动到它上次退出时的位置。

79627 次浏览

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

tableView.contentOffset.y;

接受的解决方案只有在您知道所有表视图项的大小时才有效。使用自动调整大小/估计大小并不总是正确的。

另一种方法是保存第一个可见项并向其滚动。

您可以使用以下命令获取第一个可见项 indexPath:

savedIndex = tableView.indexPathsForVisibleRows?.first

然后滚动到它通过做:

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

确保您可以加载 viewWillAppear 而不是 viewDidLoad (测试过的 iOS9)。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];
}