【问题标题】:`UIRefreshControl endRefreshing` not working`UIRefreshControl endRefreshing` 不起作用
【发布时间】: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”。

标签: ios objective-c uirefreshcontrol


【解决方案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()
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2015-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-15
          相关资源
          最近更新 更多