刷新滚轮在95%已满时停止,只有从屏幕的最顶部到达底部时,刷新才会起作用。
lazy var refreshControl: UIRefreshControl = {
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action:
#selector(VFeedVC.refresh(_:)),
for: .valueChanged)
return refreshControl
}()
override func viewDidLoad() {
self.tableView.addSubview(refreshControl)
}
func refresh(_ sender: Any) {
Metric.sendEvent("RefreshFeed")
self.refreshControl.beginRefreshing()
self.getFeeds(self.user.id)
}
func getFeeds(_ userId: Int) {
VNetwork.getFeeds(userId) { feeds in
self.feeds = feeds
self.tableView.isHidden = self.feeds.count == 0
self.configureCells()
self.refreshControl.endRefreshing()
self.tableView.reloadData()
}
}

发布于 2018-01-30 16:36:44
这对我在iOS 11上很有效:
override func viewDidLoad() {
self.tableView.refreshControl = refreshControl
self.tableView.addSubview(refreshControl)
}而且,您不需要显式地告诉刷新控件开始刷新,因此这就足够了:
func refresh(_ sender: Any) {
Metric.sendEvent("RefreshFeed")
self.getFeeds(self.user.id)
}还要确保在VNetwork.getFeeds(userId) { feeds in的回调中,您处于主线程上。
发布于 2018-01-30 16:40:56
使用self.tableView.refreshControl = refreshControl,您可以直接将refreshControl添加到表视图中,也不必调用self.refreshControl.beginRefreshing()
lazy var refreshControl: UIRefreshControl = {
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action:
#selector(VFeedVC.refresh(_:)),
for: .valueChanged)
return refreshControl
}()
override func viewDidLoad() {
self.tableView.refreshControl = refreshControl
self.tableView.addSubview(refreshControl)
}
func refresh(_ sender: Any) {
Metric.sendEvent("RefreshFeed")
self.getFeeds(self.user.id)
}
func getFeeds(_ userId: Int) {
VNetwork.getFeeds(userId) { feeds in
self.feeds = feeds
self.tableView.isHidden = self.feeds.count == 0
self.configureCells()
self.refreshControl.endRefreshing()
self.tableView.reloadData()
}
}发布于 2018-01-30 17:11:41
将refreshControl.endRefreshing()放在tableView.reloadData()之后,如下所示:
tableView.reloadData()
DispatchQueue.main.async {
self.refreshControl.endRefreshing()
}https://stackoverflow.com/questions/48516717
复制相似问题