`UIRefreshControl endRefreshing`无效

时间:2016-04-19 18:59:50

标签: ios objective-c uirefreshcontrol

我的应用程序中有一个pull-to-refresh功能,据我所知,设置了“正常方式”:

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];

[refreshControl addTarget:self action:@selector(refreshPage) forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;

清爽部分工作正常。刷完后我打电话给

[self.refreshControl endRefreshing]

此时,它似乎忽略了该调用并继续显示拉动到刷新的“间隙”,只有没有微调器:

pull to refresh sticking

(我确实在该行有一个断点来验证endRefreshing IS 实际被调用了)

如果我用拇指轻轻拉动页面(稍微向下拉,而不是将其拉得足以触发另一次拉动 - 刷新),它将自行修复并重新弹回原位。但是当我打电话给[self.refreshControl endRefreshing]时,为什么不回来呢?有没有办法可以通过编程方式强制它回弹?

我还尝试延迟endRefreshing来电:

[self.refreshControl performSelector:@selector(endRefreshing) withObject:nil afterDelay:0.0]

但仍然无视通话。

4 个答案:

答案 0 :(得分:5)

您可以停止refreshControl并使用动画重置tableview位置

self.refreshControl.endRefreshing()

UIView.animate(withDuration: 0.5, animations: {
    yourTableview.contentOffset = CGPoint.zero
})

答案 1 :(得分:3)

事实证明,在我的情况下,问题是添加UIRefreshControl的代码被多次命中并创建了多个refreshControl,因此endRefreshing被调用了不同的UIRefreshControl的实例,而不是启动pull-to-refresh的实例。

我的愚蠢错误。

答案 2 :(得分:3)

我将UITableView contentOffset设为零,工作

Swift 3.0

refreshControl.endRefreshing()
self.yourTableView.contentOffset = CGPoint.zero

答案 3 :(得分:0)

在调用refreshControl.endRefreshing()属性isRefreshing = false之后,它仍然可以显示。问题在于图层-当进行其他动画时,或者带​​有刷新控制的视图控制器不可见(显示了其他vc或将关键窗口更改为另一个)。下面的代码帮助我解决了这个问题

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
    guard let strongSelf = self else { return }
    if strongSelf.refreshControl.isRefreshing {
        strongSelf.refreshControl.endRefreshing()
    } else if !strongSelf.refreshControl.isHidden {
        strongSelf.refreshControl.beginRefreshing()
        strongSelf.refreshControl.endRefreshing()
    }
}