【问题标题】:Refresh Control Issue with custom cells - Swift 4 IOS 11自定义单元格的刷新控制问题 - Swift 4 IOS 11
【发布时间】:2018-01-22 11:06:41
【问题描述】:

我正在构建一个 iOS 应用程序,并尝试在我的项目上实现下拉刷新控件。数据从 API 正确获取并显示在我的表上。但是当我下拉刷新时问题就出现了。会发生以下情况:

    1234563 ,重叠...
  1. 如果我快速连续多次下拉,同样的问题会发生。

我相信这是因为 tableview.reloadData() 被快速连续多次调用。但是为什么默认单元格会在我的自定义单元格之上出列?以下是函数中处理下拉的部分代码:

@objc func refreshFunc(){
        //let offset = scrollView.contentOffset.y
        if myRefreshControl.isRefreshing{
            readJson { (activities) in
                self.activities = activities
                self.tableView.reloadData()
                self.myRefreshControl.endRefreshing()
            }
        }
        
    }

任何帮助将不胜感激。提前致谢

更新:

把代码改成下面的代码好像可以消除错误,但问题是现在我需要往下拉两次才能让表格上的结果更新:

@objc func refreshFunc(){
            readJson { (activities) in
                self.activities = activities
                
            }
            self.tableView.reloadData()

            self.myRefreshControl.endRefreshing()

    }

请注意,在主线程上运行 reloadData 会得到相同的结果,我仍然需要下拉两次才能更新。

【问题讨论】:

  • 调用主线程解决了吗?
  • 不,没有,请在下面查看

标签: ios swift uitableview pull-to-refresh


【解决方案1】:

请尝试在刷新表格视图之前延迟一些时间,这样可以解决您的问题。

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayTime) { [weak self] in
    self?.tableView.reloadData()
}

希望有效果

干杯:)

【讨论】:

  • 是以秒为单位的时间吗?
  • 即使我按照建议添加了一些时间,如果我拖动一定距离,我也会遇到重叠单元格的问题。
【解决方案2】:
DispatchQueue.main.async {
        self.tableView.reloadData
}

试试这个,如果你想改变 UI,你必须在主线程上调用

【讨论】:

  • 还是没有解决问题。当我复制上面描述的内容时,我遇到了同样的问题,我之前也尝试过。如果我在按钮内调用相同的代码,我没有这样的问题,但是使用拉动刷新控制器调用它会引发这个问题。我认为这是因为在调用 tableview.reloadData() 时表正在移动(通过拉动)。但我仍然不知道如何解决这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
相关资源
最近更新 更多