首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIRefreshControl不能正常工作

UIRefreshControl不能正常工作
EN

Stack Overflow用户
提问于 2018-01-30 16:11:16
回答 4查看 2K关注 0票数 6

刷新滚轮在95%已满时停止,只有从屏幕的最顶部到达底部时,刷新才会起作用。

代码语言:javascript
复制
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()
    }
}

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-01-30 16:36:44

这对我在iOS 11上很有效:

代码语言:javascript
复制
override func viewDidLoad() {
    self.tableView.refreshControl = refreshControl
    self.tableView.addSubview(refreshControl)
}

而且,您不需要显式地告诉刷新控件开始刷新,因此这就足够了:

代码语言:javascript
复制
func refresh(_ sender: Any) {
    Metric.sendEvent("RefreshFeed")
    self.getFeeds(self.user.id)
}

还要确保在VNetwork.getFeeds(userId) { feeds in的回调中,您处于主线程上。

票数 3
EN

Stack Overflow用户

发布于 2018-01-30 16:40:56

使用self.tableView.refreshControl = refreshControl,您可以直接将refreshControl添加到表视图中,也不必调用self.refreshControl.beginRefreshing()

代码语言:javascript
复制
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()
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-01-30 17:11:41

将refreshControl.endRefreshing()放在tableView.reloadData()之后,如下所示:

代码语言:javascript
复制
tableView.reloadData()
DispatchQueue.main.async {
    self.refreshControl.endRefreshing()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48516717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档