繁体   English   中英

`UIRefreshControl endRefreshing`无效

[英]`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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM