2010-05-08 9 views

Trả lời

146

Bạn có thể dễ dàng lấy bù đắp chính xác của chế độ xem bảng bằng cách xem thuộc tính contentOffset của nó. Đối với cuộn dọc, hãy xem:

tableView.contentOffset.y; 
+1

Đó là CGPoint trong chế độ xem cuộn, tôi không chắc chắn cách tôi có thể biết UITableViewCell tương ứng với. – progrmr

+15

Bạn không cần ô nếu bạn sử dụng offset; chỉ cần đặt độ lệch khi bạn nhập lại chế độ xem. Tuy nhiên, nếu bạn PHẢI biết ô ở trên cùng, chỉ cần sử dụng: [tableView indexPathForRowAtPoint: CGPointMake (0, 0)]; –

+0

sử dụng contentOffset hoạt động hoàn hảo, nó trả về vị trí cuộn chính xác vị trí của ứng dụng khi ứng dụng thoát lần cuối. Cảm ơn! Tôi không cần phải biết nó là cái gì. – progrmr

2

Giải pháp được chấp nhận chỉ hoạt động nếu bạn biết kích thước của tất cả các mục trong bảng. Với kích thước tự động/kích thước ước tính không phải lúc nào cũng đúng.

Một cách khác là lưu mục hiển thị đầu tiên và cuộn đến mục đó.

Bạn có thể lấy indexPath mục có thể nhìn thấy đầu tiên với:

savedIndex = tableView.indexPathsForVisibleRows?.first 

Sau đó di chuyển đến nó bằng cách làm:

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

Hãy chắc chắn rằng bạn có thể tải trong viewWillAppear và không viewDidLoad (thử nghiệm iOS 9) . ViewWillAppear là khi chế độ xem đã hoàn thành bố cục - có sự khác biệt về kết quả.

-(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]; 
}