UIRefreshController 结束动画问题

6

当我调用 self.refreshControl.endRefreshing() 时,它会像应该的那样将tableView弹回到原来的位置。我该如何使它在 endRefreshing() 上流畅地返回到原来的位置?


我遇到了这个问题,唯一的解决方案是在 endRefreshing 后延迟调用 reloadData。[self.tableView performSelector:@selector(reloadData) withObject:self.tableView afterDelay:0.2]; - jc.vargas.valencia
@user1715438 非常感谢。 - uhfocuz
@user1715438,我也是,afterDelay 对我有用,这是唯一的解决方案。 - gabbler
下次请尽量提供出现问题的代码。 - alexmorhun
7个回答

14

试一下这个

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

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

11

如果你遇到了这个问题,你必须在重新加载表格数据之前调用endRefreshing方法。否则,在表格更新时,它将覆盖刷新器并导致其看起来不正常。


当刷新完成时,必须显式调用“endRefreshing”。 - alexmorhun

3
我遇到了这个问题,并尝试了上面的每一个建议(以及类似帖子中的其他建议)。
在我的情况下,问题的原因是……我没有在界面构建器中启用刷新。我只添加了代码来创建刷新控件并监听值更改事件。它起作用了,但像其他人描述的那样“跳动”。
在界面构建器中启用它可以解决我的问题。如果你已经尝试了其他所有方法,请检查你的故事板!

Enable Refreshing in your storyboard!


2
// stop refreshing
[self.refreshControl endRefreshing];

// update tableview
[self.tableview performSelector:@selector(reloadData) withObject:nil afterDelay:.3]; 

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

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

我将调用包装在UIView动画块中,过渡变得平滑起来。
UIView.animateWithDuration(0.5) {
    self.refreshControl.endRefreshing()
}

0

这对我来说在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)
}

-1
在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:委托中执行,而不是在viewDidLoad或viewWillAppear中。 浏览其他线程时,似乎在尝试同时结束刷新和显示弹出窗口时,Apple SDK存在问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接