我的应用程序中有一个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]
此时,它似乎忽略了该调用并继续显示拉动到刷新的“间隙”,只有没有微调器:
(我确实在该行有一个断点来验证endRefreshing
IS 实际被调用了)
如果我用拇指轻轻拉动页面(稍微向下拉,而不是将其拉得足以触发另一次拉动 - 刷新),它将自行修复并重新弹回原位。但是当我打电话给[self.refreshControl endRefreshing]
时,为什么不回来呢?有没有办法可以通过编程方式强制它回弹?
我还尝试延迟endRefreshing
来电:
[self.refreshControl performSelector:@selector(endRefreshing) withObject:nil afterDelay:0.0]
但仍然无视通话。
答案 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()
}
}