UIRefreshController 结束动画问题
Posted
技术标签:
【中文标题】UIRefreshController 结束动画问题【英文标题】:UIRefreshController Ending Animation Issue 【发布时间】: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 对我有用,这是唯一的解决方案。 下次尝试提供一些有问题的代码。 【参考方案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 中似乎存在问题。
【讨论】:
以上是关于UIRefreshController 结束动画问题的主要内容,如果未能解决你的问题,请参考以下文章
UIRefreshController Tableview 中的前 2 行不活动