UIRefreshControl是iOS中用于实现下拉刷新功能的控件,通常与UITableView或UICollectionView配合使用。它提供了一个标准的刷新指示器,当用户下拉列表时会触发刷新操作。
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(refreshData), for: .valueChanged)
tableView.refreshControl = refreshControl
@objc func refreshData() {
// 立即显示刷新指示器
DispatchQueue.main.async {
self.tableView.setContentOffset(CGPoint(x: 0, y: -self.refreshControl.frame.size.height), animated: true)
}
// 执行数据加载
loadData { [weak self] in
// 数据加载完成后结束刷新
DispatchQueue.main.async {
self?.refreshControl.endRefreshing()
}
}
}
如果使用自动布局,确保tableView的contentInset不会与refreshControl冲突:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if let refreshControl = tableView.refreshControl {
tableView.contentInset = UIEdgeInsets(top: refreshControl.frame.height, left: 0, bottom: 0, right: 0)
}
}
func loadData(completion: @escaping () -> Void) {
DispatchQueue.global(qos: .userInitiated).async {
// 模拟网络请求
Thread.sleep(forTimeInterval: 2)
// 数据处理...
DispatchQueue.main.async {
self.tableView.reloadData()
completion()
}
}
}
通过以上方法,可以解决大多数UIRefreshControl加载顺序不正确的问题,确保刷新功能流畅稳定。
没有搜到相关的沙龙