带有UIRefreshControl的TableView在重新加载时似乎会出现一点故障?

时间:2019-07-18 05:45:36

标签: ios swift uitableview refresh uirefreshcontrol

我在容器内有一个表格视图。当用户向下滑动以刷新时,我注意到单元格立即弹出顶部。看起来很越野车。

func setupRefresh() {
    //        refreshControl.attributedTitle = NSAttributedString(string: "")
    refreshControl.addTarget(self, action: #selector(refresh(_:)), for: UIControl.Event.valueChanged)
    tableView.insertSubview(refreshControl, at: 0)
    //tableView.addSubview(refreshControl) // not required when using UITableViewController
}

@objc func refresh(_ sender:AnyObject) {
    // Code to refresh table view
    print("Refreshing...")
    tableView.isScrollEnabled = false
    array.removeAll()
    items = 0
    number = 0
    getRecentNotifs(limit: 10)
    //        refreshControl.endRefreshing()
    //        tableView.isScrollEnabled = true
    //        tableView.isUserInteractionEnabled = true
}

然后在我的提取方法中,执行此操作。我还尝试在刷新过程中执行此操作,但失败了,结果仍然相同

dispatchGroup.notify(queue: .main, execute: {
    if true {
        if !self.tableView.isScrollEnabled {
            self.refreshControl.endRefreshing()
            self.tableView.isScrollEnabled = true
        }

        self.tableView.reloadData()
    }
})

我看过here以及更多其他地方,都没有成功。

对此的一个非常不好的解决方法是:

 ...
Timer.scheduledTimer(timeInterval: 0.8, target: self, selector: #selector(self.delayedAction), userInfo: nil, repeats: false)
}

@objc func delayedAction() {
    refreshControl.endRefreshing()
}

1 个答案:

答案 0 :(得分:2)

refreshControl.endRefreshing()移至您要从中获取数据的函数的完成处理程序中。

示例:

func getRecentNotifs(limit: Int) {

     // Get Data ...

     Network.getData(limit: limit) { (data, error) in   // Completion Block

          // Update Table View
          self.tableView.reloadData()

          // End Refresh Control
          self.refreshControl.endRefreshing()
          self.activityIndicatorView.stopAnimating()

     })

}

您在刷新控件的target方法中调用refreshControl.endRefreshing(),所以它马上结束了。