修复iOS拉动以刷新动画

问题描述 投票:0回答:2

这是我的刷新控件代码。

 var refreshControl = UIRefreshControl()

 override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "Airport List"
        airportTable.delegate = self
        airportRequest.delegate = self
        airportRequest.fetchAirports()
        airportTable.dataSource = self
        refreshControl.addTarget(self, action: #selector(refresh), for: UIControl.Event.valueChanged)
        airportTable.addSubview(refreshControl)
    }

    @objc func refresh(sender: UIRefreshControl) {
        airportRequest.fetchAirports()
        sender.endRefreshing()
    }

在下面的图像中,您可以看到动画无法正常工作。我该如何解决。最好,我希望动画继续进行,直到tableView被更新。

enter image description here

ios swift uitableview pull-to-refresh
2个回答
1
投票

您在调用fetchAirports()后立即结束动画,我认为这是异步网络请求或延迟完成的内容。

如果要等到提取机场并更新表后,请向该函数添加一个完成闭包。像这样的东西:

func fetchAirports(@escaping completion: (() -> Void) {
    // Perform the network request and once it finishes, call completion()
    networkRequest() {
        completion()
    }
}

然后使用您的刷新方法:

@objc func refresh(sender: UIRefreshControl) {
    airportRequest.fetchAirports(completion: { [weak self] in
        self?.sender.endRefreshing()
    })
}

0
投票

尝试一下..

@objc func refresh(sender: UIRefreshControl) {
        sender.beginRefreshing()
        airportRequest.fetchAirports(completion: { [weak self] in
        tableView?.reloadData()
        self?.sender.endRefreshing()
     })
  } 

0
投票

您可以在向表中插入新数据后调用此方法。

refreshControl.endRefreshing()
© www.soinside.com 2019 - 2024. All rights reserved.