【发布时间】:2011-02-17 06:18:18
【问题描述】:
有什么方法可以找出滚动窗口顶部的UITableViewCell 吗?
我想获取当前滚动位置,以便在应用退出时保存它。当应用程序启动时,我想滚动到它上次退出时的位置。
【问题讨论】:
标签: iphone objective-c uitableview uiscrollview
有什么方法可以找出滚动窗口顶部的UITableViewCell 吗?
我想获取当前滚动位置,以便在应用退出时保存它。当应用程序启动时,我想滚动到它上次退出时的位置。
【问题讨论】:
标签: iphone objective-c uitableview uiscrollview
您可以通过查看其contentOffset 属性轻松获取表格视图的确切偏移量。对于垂直滚动,请看:
tableView.contentOffset.y;
【讨论】:
仅当您知道所有表格视图项的大小时,可接受的解决方案才有效。自动调整大小/估计大小并不总是正确的。
另一种方法是保存第一个可见项目并滚动到它。
您可以通过以下方式获取第一个可见项 indexPath:
savedIndex = tableView.indexPathsForVisibleRows?.first
然后通过执行以下操作滚动到它:
tableView.scrollToRowAtIndexPath(savedIndex, atScrollPosition: .Top, animated: false)
【讨论】:
确保您可以在 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];
}
【讨论】: