Я не уверен, сталкивался ли кто-нибудь с этой проблемой, но кажется, что мой refreshControl слишком чувствительный.В моей реализации я пытаюсь сделать нажатие для обновления, и код выполняется еще до того, как я вижу вращение refreshControl.
Что-то не так я делаю?
Моя реализация пока.
//At initiation
lazy var refreshControl: UIRefreshControl = {
let rc = UIRefreshControl()
rc.tintColor = .white
rc.addTarget(self, action: #selector(refreshControlDidRefresh), for: .valueChanged)
return rc
}()
//At viewDidLoad(), I call a function setupViews()
func setupViews() {
view.backgroundColor = .white
view.addSubview(tableView)
tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
tableView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
tableView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
tableView.register(GossipsTableViewCell.self, forCellReuseIdentifier: "gossipCell")
tableView.tableHeaderView = emptyTableViewHeader()
tableView.refreshControl = refreshControl
}
@objc func refreshControlDidRefresh() {
DispatchQueue.main.async {
self.gossips.removeAll()
self.tableView.reloadData()
}
getData()
}
func getData() {
FirebaseClient.shared.fetchAllGossips { (results, error) in
if let error = error {
print(error.localizedDescription)
} else if let results = results {
self.gossips = results.sorted(by: { (gossip1, gossip2) -> Bool in
guard
let gossip1Timestamp = gossip1.timestamp,
let gossip2Timestamp = gossip2.timestamp else {
return false
}
return gossip1Timestamp > gossip2Timestamp
})
self.filterGossips()
DispatchQueue.main.async {
if self.refreshControl.isRefreshing {
self.refreshControl.endRefreshing()
}
if JustHUD.shared.isActive {
JustHUD.shared.hide()
}
var indexPaths = [IndexPath]()
for (index, _) in self.gossips.enumerated() {
let indexPath = IndexPath(row: index, section: 0)
indexPaths.append(indexPath)
}
self.tableView.insertRows(at: indexPaths, with: .automatic)
self.segmentedControl.isUserInteractionEnabled = true
}
}
}
}
Вы можете увидеть результаты здесь.Когда я пытаюсь сделать это, обновление выполняется даже до того, как я вижу, как рисуется refreshControl.Я что-то упускаю?
![enter image description here](https://i.stack.imgur.com/3xVjG.gif)