【问题标题】:UITableView doesn't scroll automatically if the datasource changes如果数据源发生变化,UITableView 不会自动滚动
【发布时间】:2017-04-17 02:03:37
【问题描述】:

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

但是有一个问题。

例如 arrayOne 有 1 项,arrayTwo 有 10 项。 因此,如果我切换到 arrayTwo 并滚动到 tableview 的底部,然后切换回 arrayOne,则 tableview 保持向下滚动并且我看不到任何项目。但是如果我开始滚动,tableview 会自动“跳转”到第一项。

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

【问题讨论】:

  • 我认为,切换段按钮时必须重新加载tableView。
  • @iDeveloper 我在 segmentedControl 中调用 reloadData() 已更改。
  • 能否上传代码sn-p
  • 试试这个tableView.scrollsToTop = true
  • 你是在主线程加载新数据吗?

标签: ios swift uitableview uisegmentedcontrol


【解决方案1】:

重新加载表格后,您可以使用以下两行中的任何一行

let indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)

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

【讨论】:

    【解决方案2】:

    首先我不知道你是怎么改变tableview的数据源的,但是我用这个方法来切换我的数据源。

    我创建了 3 个数组;

     var mainArr = [String]()
     var sortedArr = [String]()
     var arrToReturn : [String] {
        if segmentedController.selectedIndex == 0 {
            return mainArr
        }
        else {
            return sortedArr
        }
    }
    

    对于 tableView 数据源,我总是返回 arrToReturn

    当涉及到您的滚动问题时,听起来您正在重新加载 tableView,然后再更改它的 dataSource。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-12
      • 2013-11-05
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多