我有一个UITableViewCell,它在单击时展开并添加一个标签。
逻辑: 我在
cellForRowAtIndexPath中添加了一个标签到选定的单元格中,在didSelectRow...中我重新加载了tableView。在heightForRow...中,所选单元格展开。希望你能拍到照片。
在didSelectRow...中,我必须使用reloadData,而不是开始/结束更新。我想要做的是reloadData并让它充满活力。我可以这样做:
[UIView transitionWithView: tableView
duration: 0.40f
options: UIViewAnimationOptionTransitionCrossDissolve
animations: ^(void)
{
[self.tableView reloadData];
}
completion: nil
}];所以这会使正在变化的细胞交叉溶解。我想要的是UITableViewRowAnimationTop,但显然在转换选项中这是不可能的。有没有办法使用reloadData并使用UITableViewRowAnimationTop?
发布于 2015-02-05 20:19:06
[UITablewView reloadData:]是不可动的。但是,您可能想尝试通过用动画重新加载所有部分来重新加载tableView。
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [tableView numberOfSections])];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationAutomatic];好吧,我撒谎了。它可能是可动画的,但它需要更多关于QuartzCore框架如何在UI组件上操作的知识。
@import QuartzCore;[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"];发布于 2016-01-30 17:24:35
一种不需要CoreAnimation的简单得多的解决方案。
Swift 3:
UIView.transition(with: self.view,
duration: 0.15,
options: [.curveEaseInOut, .transitionCrossDissolve],
animations: {
self.tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows!, with: .none)
}, completion: nil)发布于 2018-01-31 02:49:37
Swift 4解决方案与QuartzCore
import QuartzCoretableView.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
tableView.reloadData()
let transition = CATransition()
transition.type = .push
transition.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
transition.fillMode = .forwards
transition.duration = 0.6
transition.subtype = .fromBottomhttps://stackoverflow.com/questions/28352798
复制相似问题