我有一个UIViewController,里面有一个tableView。我添加了一个刷新控件。但是当我拉的时候,它总是跳跃一些时间,这是不平滑的和连续的。
我用的是Swift 4和Xcode 10.1。

class ItemsController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextViewDelegate, ItemCellDelegate {
    ......
    lazy var refreshControl: UIRefreshControl = {
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action:
            #selector(handleRefresh(_:)),
                                 for: UIControl.Event.valueChanged)
        refreshControl.tintColor = UIColor.lightGray

        return refreshControl
    }()
    ......
    override func viewDidLoad() {
        // Refresh
        self.tableView.refreshControl = self.refreshControl
    }
    ......
    @objc func handleRefresh(_ refreshControl: UIRefreshControl) {
        loadData()
        self.tableView.reloadData()
        refreshControl.endRefreshing()
    }
    ......
}

最佳答案

我也面临这样的问题。您可以使用以下方法:
更改handleRefresh方法,如下所示:

@objc func handleRefresh(_ refreshControl: UIRefreshControl) {
   if !tableView.isDragging {
    refresh() // refresh is another method for your reloading jobs
   }

}

添加刷新方法。
func refresh() {
  self.refreshControl.endRefreshing()
  self.tableView.reloadData()
}

最后,您需要实现scrollViewDidendDraging。如果你拉得足够远,refreshControl将刷新,因此调用refresh。否则,您要么拖得不够远,要么拖到了表的另一部分,要么拖得太快,以至于refreshControl ValueChanged事件尚未触发,它将刷新那里的表。
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
   if refreshControl.isRefreshing == true {
    refresh()
   }
 }

关于ios - Swift 4 Refresh Control不流畅但总是跳,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55402810/

10-08 21:25