首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动画[tableView reloadData]

动画[tableView reloadData]
EN

Stack Overflow用户
提问于 2015-02-05 19:50:53
回答 5查看 14.6K关注 0票数 7

我有一个UITableViewCell,它在单击时展开并添加一个标签。

逻辑: 我在cellForRowAtIndexPath中添加了一个标签到选定的单元格中,在didSelectRow...中我重新加载了tableView。在heightForRow...中,所选单元格展开。希望你能拍到照片。

didSelectRow...中,我必须使用reloadData,而不是开始/结束更新。我想要做的是reloadData并让它充满活力。我可以这样做:

代码语言:javascript
复制
[UIView transitionWithView: tableView
                  duration: 0.40f
                   options: UIViewAnimationOptionTransitionCrossDissolve
                animations: ^(void)
 {
   [self.tableView reloadData];
 }
                completion: nil
 }];

所以这会使正在变化的细胞交叉溶解。我想要的是UITableViewRowAnimationTop,但显然在转换选项中这是不可能的。有没有办法使用reloadData并使用UITableViewRowAnimationTop

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-02-05 20:19:06

[UITablewView reloadData:]是不可动的。但是,您可能想尝试通过用动画重新加载所有部分来重新加载tableView。

代码语言:javascript
复制
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [tableView numberOfSections])];

[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationAutomatic];

好吧,我撒谎了。它可能是可动画的,但它需要更多关于QuartzCore框架如何在UI组件上操作的知识。

代码语言:javascript
复制
@import QuartzCore;
代码语言:javascript
复制
[self.tableView reloadData];

CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.fillMode = kCAFillModeForwards;
transition.duration = 0.6;
transition.subtype = kCATransitionFromTop;

[self.tableView.layer addAnimation:transition forKey:@"UITableViewReloadDataAnimationKey"];
票数 8
EN

Stack Overflow用户

发布于 2016-01-30 17:24:35

一种不需要CoreAnimation的简单得多的解决方案。

Swift 3:

代码语言:javascript
复制
UIView.transition(with: self.view,
                  duration: 0.15,
                  options: [.curveEaseInOut, .transitionCrossDissolve],
                  animations: {
                      self.tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows!, with: .none)
}, completion: nil)
票数 9
EN

Stack Overflow用户

发布于 2018-01-31 02:49:37

Swift 4解决方案与QuartzCore

代码语言:javascript
复制
import QuartzCore
代码语言:javascript
复制
tableView.reloadData()

let transition = CATransition()
transition.type = kCATransitionPush
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.fillMode = kCAFillModeForwards
transition.duration = 0.6
transition.subtype = kCATransitionFromBottom
    
tableView.layer.add(transition, forKey: "UITableViewReloadDataAnimationKey")

Swift 5

代码语言:javascript
复制
tableView.reloadData()
let transition = CATransition()
transition.type = .push
transition.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
transition.fillMode = .forwards
transition.duration = 0.6
transition.subtype = .fromBottom
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28352798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档