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一个刷新控件,并监听值更改的事件。 它的工作,但是像其他人所描述的那样“跳动”。
在界面生成器中启用它解决了我的问题。 如果你尝试了其他一切,请检查你的故事板!