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

时间:2010-05-08 22:32:01

标签: iphone objective-c uitableview uiscrollview

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

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

3 个答案:

答案 0 :(得分:157)

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

tableView.contentOffset.y;

答案 1 :(得分:6)

只有知道所有表视图项的大小时,才能使用已接受的解决方案。自动调整大小/估计大小并非总是如此。

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

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

savedIndex = tableView.indexPathsForVisibleRows?.first

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

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

答案 2 :(得分: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];
}