如何获取UITableView滚动位置,以便保存它?


73

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

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

Answers:


160

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

tableView.contentOffset.y;

1
那是滚动视图中的CGPoint,我不确定如何确定对应的UITableViewCell。
progrmr

15
如果使用偏移量,则不需要该单元格;只需在重新进入视图时设置偏移量即可。但是,如果您必须知道顶部的单元格,则只需使用:[tableView indexPathForRowAtPoint:CGPointMake(0,0)];
本·戈特利布

使用contentOffset可以完美地工作,它返回的滚动位置恰好是应用程序最后退出时的位置。谢谢!我根本不需要知道它是哪个单元格。
progrmr 2010年

对于C#用户,请使用这种情况:tableView.ContentOffset.Y;
Guillaume V

12

仅当您知道所有表视图项目的大小时,才能接受该解决方案。使用自动调整大小/估算的尺寸并不总是正确的。

一种选择是保存第一个可见项目并滚动到它。

您可以使用以下方法获取第一个可见项indexPath:

savedIndex = tableView.indexPathsForVisibleRows?.first

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

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

1

确保可以加载viewWillAppear而不加载viewDidLoad(已测试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];
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.