如果数据源发生变化,UITableView不会自动滚动

时间:2016-12-02 08:11:25

标签: ios swift uitableview uisegmentedcontrol

我有一个UITableView,其中有两个数组作为数据源。我还有一个UISegmentedControl在这些数组之间切换。我使用segmentedControlChanged方法调用reloadData方法。 这很好。

但是有一个问题。

例如,arrayOne有1个项目,arrayTwo有10个项目。 因此,如果我切换到arrayTwo并滚动到tableview的底部,然后切换回arrayOne,tableview会保持向下滚动,我看不到任何项目。但是,如果我开始滚动,桌面视图"跳跃"自动到第一项。

所以我的问题是,当tabledata源更改时,如何自动触发此行为?

2 个答案:

答案 0 :(得分:1)

重新加载表

后,您可以使用以下两行中的任何一行
let indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)

mainTableView.setContentOffset(CGPoint.zero, animated: true)

答案 1 :(得分:0)

首先,我不知道如何更改tableview的数据源,但我将此方法用于数据源切换。

我创建了3个数组;

document.querySelector("main-window").set('route.path', "/");

我总是为tableView数据源返回Matcher#appendReplacement

当涉及到滚动问题时,听起来你在更改其dataSource之前正在重新加载tableView。

之后当你开始滚动时,tableView重新加载单元格并且找不到旧项目并自动将其滚动位置设置为屏幕开始。

你是否有任何关于设置tableviews滚动位置的代码,即使它是无关紧要的?如果你有,你应该检查它。