Is there any way to find out which UITableViewCell
is at the top of the scroll window?
I'd like to get the current scroll position so that I can save it when the app exits. When the app gets started I want to scroll to the position it was at when it last exited.
You can easily grab the exact offset of the table view by looking at its contentOffset
property. For the vertical scroll, look at:
tableView.contentOffset.y;
The accepted solution only works if you know the size of all table view items. With auto sizing/estimated size that is not always true.
One alternative is to save the first visible item and scroll to it.
You can get the first visible item indexPath with:
savedIndex = tableView.indexPathsForVisibleRows?.first
Then scroll to it by doing:
tableView.scrollToRowAtIndexPath(savedIndex, atScrollPosition: .Top, animated: false)
Make sure you can load in viewWillAppear and not viewDidLoad (tested iOS 9). ViewWillAppear is when view has finished layout - there is differences in the outcome.
-(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];
}