UIRefreshController结束animation问题

当我调用self.refreshControl.endRefreshing()它将tableView恢复到它原来的位置。 我应该如何去animation它,以便stream利地返回到endRefreshing()原来的位置?

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

尝试这个

 [CATransaction begin]; [CATransaction setCompletionBlock:^{ // reload tableView after refresh control finish refresh animation [self.tableView reloadData]; }]; [self.refreshControl endRefreshing]; [CATransaction commit]; 
 // stop refreshing [self.refreshControl endRefreshing]; // update tableview [self.tableview performSelector:@selector(reloadData) withObject:nil afterDelay:.3]; 

这适用于Swift 2

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

这是我的超时function:

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

我也遇到了这个问题。 对于endRefreshing()文档指出:

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

我将这个调用包装在一个UIViewanimation块中,并且转换变得平滑:

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

在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() } 

起初,我是在许multithreading中提出endRefreshingbuild议,但事实上,这是另一种方式,这对我的作品。

附加信息:该代码在位置:didChange:delegate中执行,而不是在viewDidLoad或viewWillAppear中执行。 通过其他线程,当您尝试结束刷新并尝试同时显示一个popup窗口时,似乎苹果SDK中存在一个问题。

我有这个问题,并尝试上面的每个build议(和其他类似的线程)。

结果发生在我的例子中的问题是……我没有在界面生成器中启用刷新。 我只添加了代码来创build一个刷新控件,并监听值更改的事件。 它的工作,但是像其他人所描述的那样“跳动”。

在界面生成器中启用它解决了我的问题。 如果你尝试了其他一切,请检查你的故事板!

在故事板中启用刷新!