[英]`UIRefreshControl endRefreshing` not working
我的应用程序中有一个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]
时,它为什么不[self.refreshControl endRefreshing]
? 有没有办法可以通过编程方式强制它回弹?
我也尝试过延迟调整endRefreshing
:
[self.refreshControl performSelector:@selector(endRefreshing) withObject:nil afterDelay:0.0]
但它仍然无视通话。
您可以停止refreshControl
并使用动画重置tableview
位置
self.refreshControl.endRefreshing()
UIView.animate(withDuration: 0.5, animations: {
yourTableview.contentOffset = CGPoint.zero
})
事实证明,在我的情况下,问题是添加UIRefreshControl
的代码被多次命中并创建了多个refreshControl,因此在endRefreshing
的不同实例上UIRefreshControl
不是启动了要刷新。
对我来说是愚蠢的错误。
对我来说,将UITableView contentOffset
设置为零,工作
在Swift 3.0中
refreshControl.endRefreshing()
self.yourTableView.contentOffset = CGPoint.zero
调用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()
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.