重新加载tableview后保持contentOffset的方法吗?

Posted

技术标签:

【中文标题】重新加载tableview后保持contentOffset的方法吗?【英文标题】:Is it a way to keep contentOffset after reloading tableview? 【发布时间】:2015-04-08 13:31:16 【问题描述】:

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

【问题讨论】:

【参考方案1】:

TableView 不会重置滚动位置。即使在调用 reloadData 函数后,它也会保持内容偏移。所以不需要做任何事情,如果你想保持像素位置。

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

【讨论】:

【参考方案2】:

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

self.tableView.contentOffset.y

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

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

【讨论】:

【参考方案3】:

重新加载表格视图后需要调用TableView的方法scrollToRowAtIndexPath:atScrollPosition:animated

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

UITableViewScrollPositionNone,
UITableViewScrollPositionTop,    
UITableViewScrollPositionMiddle,   
UITableViewScrollPositionBottom

和动画参数中的YES/NO。

【讨论】:

【参考方案4】:

在使用 reloadData 之前调用scrollToRowAtIndexPath:atScrollPosition:animated:(带动画:NO)

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

希望对你有帮助

【讨论】:

以上是关于重新加载tableview后保持contentOffset的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

目标 C:如何突出显示 tableView 单元格并在重新加载表格时保持突出显示?

Obj-C - 数据重新加载后TableView滚动到底部?

Swift - 第二次加载后 Tableview 无法正确重新加载

更改数据和 popViewController 后 TableView 不会重新加载

关闭 UIViewController 后如何重新加载 tableView

快速单击其中一个 tableview 单元格内的按钮后重新加载 tableview