【问题标题】:UIRefreshController Ending Animation IssueUIRefreshController 结束动画问题
【发布时间】:2014-12-03 19:59:52
【问题描述】:

当我调用 self.refreshControl.endRefreshing() 时,它会将 tableView 捕捉回原来的位置。我应该如何对其进行动画处理,以便它流畅地返回到 endRefreshing() 上的原始位置?

【问题讨论】:

  • 我有这个问题,我发现的唯一解决方案是在 endRefreshing 之后延迟调用 reloadData。 [self.tableView performSelector:@selector(reloadData) withObject:self.tableView afterDelay:0.2];
  • @user1715438 非常感谢。
  • @user1715438,我也是,afterDelay 对我有用,这是唯一的解决方案。
  • 下次尝试提供一些有问题的代码。

标签: ios xcode swift uirefreshcontrol


【解决方案1】:

试试这个

[CATransaction begin];
[CATransaction setCompletionBlock:^{
    // reload tableView after refresh control finish refresh animation
    [self.tableView reloadData];
}];

[self.refreshControl endRefreshing];
[CATransaction commit];

【讨论】:

    【解决方案2】:

    对于遇到此问题的任何人,您必须在重新加载表数据之前调用您的 endRefreshing 方法。否则,当表格更新时,它将覆盖刷新并导致它看起来有问题。

    【讨论】:

    • "endRefreshing" 刷新完成后必须显式调用
    【解决方案3】:
    // stop refreshing
    [self.refreshControl endRefreshing];
    
    // update tableview
    [self.tableview performSelector:@selector(reloadData) withObject:nil afterDelay:.3]; 
    

    【讨论】:

      【解决方案4】:

      我遇到了这个问题,并尝试了上面的每一个建议(以及来自类似线程的其他建议)。

      在我的情况下问题出在...我没有在界面生成器中启用刷新。我只添加了创建刷新控件并侦听值更改事件的代码。它有效,但正如其他人所描述的那样“跳跃”。

      在界面生成器中启用它解决了我的问题。如果您已经尝试过其他所有方法,请检查您的故事板!

      【讨论】:

        【解决方案5】:

        我也遇到过这个问题。对于endRefreshing(),文档说明:

        如果还启用了动画,则使用动画隐藏控件。

        我将调用包装在 UIView 动画块中,过渡变得平滑:

        UIView.animateWithDuration(0.5) {
            self.refreshControl.endRefreshing()
        }
        

        【讨论】:

          【解决方案6】:

          这对我来说适用于 Swift 2

          if self.refreshControl.refreshing {
               self.refreshControl.endRefreshing()
          }
          
          GlobalHelper.setTimeout(0.1, block: {
               self.tableView.reloadData()
          })
          

          这是我的超时功能:

          static func setTimeout(delay:NSTimeInterval, block:()->Void) -> NSTimer {
              return NSTimer.scheduledTimerWithTimeInterval(delay, target: NSBlockOperation(block: block), selector: #selector(NSOperation.main), userInfo: nil, repeats: false)
          }
          

          【讨论】:

            【解决方案7】:

            在 Swift 3 iOS 10 中,我得到了与 ibrahimyilmaz 类似的方法,它是:

            self.refreshControl.endRefreshing()
            //Need to dispatch the alertView, otherwise, RefreshControl.endRefreshing() doesn't work.
            let when = DispatchTime.now() + 1 
            DispatchQueue.main.asyncAfter(deadline: when) { [weak self] in
              self?.showSettingAlertView()
            }
            

            起初,我按照许多线程中的建议调度 endRefreshing,但实际上它是对我有用的另一种方式。

            附加信息:此代码在 location:didChange:delegate 中执行,而不是在 viewDidLoad 或 viewWillAppear 中。 通过其他线程,当您尝试结束刷新并尝试同时显示弹出窗口时,Apple SDK 中似乎存在问题。

            【讨论】:

              猜你喜欢
              • 2018-08-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-03-17
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多