自定义单元格的刷新控制问题 - Swift 4 IOS 11

Posted

技术标签:

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

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

    1234563 ,重叠...

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

我相信这是因为 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 会得到相同的结果,我仍然需要下拉两次才能更新。

【问题讨论】:

调用主线程解决了吗? 不,没有,请在下面查看 【参考方案1】:

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

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

希望有效果

干杯:)

【讨论】:

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

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

【讨论】:

还是没有解决问题。当我复制上面描述的内容时,我遇到了同样的问题,我之前也尝试过。如果我在按钮内调用相同的代码,我没有这样的问题,但是使用拉动刷新控制器调用它会引发这个问题。我认为这是因为在调用 tableview.reloadData() 时表正在移动(通过拉动)。但我仍然不知道如何解决这个问题

以上是关于自定义单元格的刷新控制问题 - Swift 4 IOS 11的主要内容,如果未能解决你的问题,请参考以下文章

在swift 3中显示来自自定义单元格的警报

Swift:无法以编程方式编辑自定义表格单元格的属性

如何在 Swift 中使用搜索栏过滤具有自定义单元格的 UITableView 的内容?

表格内容在使用子视图的自定义单元格的 TableView 滚动上消失 - Swift

带有Swift的多个自定义单元格的UITableview

在 calendarTableView 自定义单元格中添加视图破坏了代码 Swift 4