`UIRefreshControl endRefreshing` 不起作用

Posted

技术标签:

【中文标题】`UIRefreshControl endRefreshing` 不起作用【英文标题】:`UIRefreshControl endRefreshing` not working 【发布时间】:2016-04-19 18:59:49 【问题描述】:

我的应用中有一个下拉刷新功能,据我所知,这是设置“正常方式”:

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]

但它仍然忽略调用。

【问题讨论】:

如果您使用的是 IB,您是否将 UITableView 'Refreshing' 属性设置为 Enabled? @fbara - 我正在使用情节提要。我没有通过 xcode UI 或代码看到“刷新”属性... 点击 UITableViewController。在 Attributes Inspector 中有一个名为“Refreshing”的设置,并在下拉菜单中选择“Enabled”。 【参考方案1】:

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

self.refreshControl.endRefreshing()

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

【讨论】:

【参考方案2】:

事实证明,就我而言,问题在于用于添加UIRefreshControl 的代码被多次点击并创建了多个refreshControl,因此endRefreshing 在@987654323 的不同实例上被调用@ 比启动下拉刷新的那个。

我犯了一个愚蠢的错误。

【讨论】:

【参考方案3】:

对我来说将UITableView contentOffset 设置为零,有效

Swift 3.0

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

【讨论】:

【参考方案4】:

调用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()
    

【讨论】:

以上是关于`UIRefreshControl endRefreshing` 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

下面的 UIRefreshControl 块视图

使用 UIRefreshControl

UIRefreshControl 重复出现

UIRefreshControl 自动启动

完全禁用 UIRefreshControl - iOS

将目标添加到 UIRefreshControl()