我有UITableViewCell
扩展并在点击时添加标签。
逻辑:
我在
cellForRowAtIndexPath
中添加了一个标签到所选单元格,并且 在didSelectRow...
我重新加载了tableView。在heightForRow...
中 选定的单元格扩展。希望你能得到这张照片。
在didSelectRow...
我必须重新加载数据,而不是开始/结束更新。我想要做的是reloadData并让它动画。我可以这样做:
[UIView transitionWithView: tableView
duration: 0.40f
options: UIViewAnimationOptionTransitionCrossDissolve
animations: ^(void)
{
[self.tableView reloadData];
}
completion: nil
}];
这就是正在改变的细胞的交叉溶解。我想要的是UITableViewRowAnimationTop
,但显然在转换选项中是不可能的。有没有办法reloadData
并使用UITableViewRowAnimationTop
?
答案 0 :(得分:9)
一个更简单的解决方案,不需要CoreAnimation。
斯威夫特3:
UIView.transition(with: self.view,
duration: 0.15,
options: [.curveEaseInOut, .transitionCrossDissolve],
animations: {
self.tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows!, with: .none)
}, completion: nil)
答案 1 :(得分:8)
[UITablewView reloadData:]
不可动画。但是,您可能希望通过使用动画重新加载所有部分来尝试重新加载tableView。
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [tableView numberOfSections])];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationAutomatic];
@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"];
答案 2 :(得分:1)
或者这个:
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange: NSMakeRange(0, [self numberOfSectionsInTableView: self.tableView])];
[self.tableView reloadSections: sections withRowAnimation: UITableViewRowAnimationTop];
就个人而言,我认为UITableViewRowAnimationFade看起来好多了。
答案 3 :(得分:1)
Swift 4 解决方案
import QuartzCore
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")
答案 4 :(得分:0)
这个UITableView扩展适用于Swift 4:
extension UITableView {
func reloadDataWithAnimation(duration: TimeInterval, options: UIViewAnimationOptions) {
UIView.animate(withDuration: duration, delay: 0.0, options: options, animations: { self.alpha = 0 }, completion: nil)
self.reloadData()
UIView.animate(withDuration: duration, delay: 0.0, options: options, animations: { self.alpha = 1 }, completion: nil)
}
}
用法:
tableView.reloadDataWithAnimation(duration: 1.0, options: .curveLinear)