重新加载 tableview 后保留 contentOffset 是一种方法吗?

Is it a way to keep contentOffset after reloading tableview?

我需要重新加载 tableview,但不知何故我想保持滚动位置。有什么办法吗?也许存储内容偏移并在 viewDidLayoutSubviews 我应该重置它?

在使用 reloadData(使用 animation:NO)之前调用 scrollToRowAtIndexPath:atScrollPosition:animated:

此外,请小心以防更新后的表格视图中的单元格较少,以防止崩溃。

希望对您有所帮助

重新加载 table 视图后,您需要调用 TableView 的方法 scrollToRowAtIndexPath:atScrollPosition:animated

只需提供索引路径,滚动位置可以是以下之一

UITableViewScrollPositionNone,
UITableViewScrollPositionTop,    
UITableViewScrollPositionMiddle,   
UITableViewScrollPositionBottom

和动画参数中的 YES/NO。

TableView 不重置滚动位置。即使在调用 reloadData 函数后,它也会保持内容偏移量。因此,如果您想保持像素位置,则无需执行任何操作。

如果您在重新加载数据或更改数据源时更改行高,则可以使用 scrollToRowAtIndexPath:atScrollPosition:animated: 方法。

您可以在重新加载之前保存您当前的偏移量 table 使用此方法保存您当前的偏移量

self.tableView.contentOffset.y

或者你可以像这样重新加载它会从你当前的偏移量重新加载你的table 试试这个:

[UIView animateWithDuration:0.1 delay:0 options:0 animations:^{
     self.tableView.contentOffset = CGPointMake(0, currentOffset);
} completion:^(BOOL finished) {
     [self.tableView reloadData];
}];