动画[tableView reloadData]

5 objective-c uitableview reloaddata ios

我有一个UITableViewCell扩展并在点击时添加标签.

逻辑:

cellForRowAtIndexPath在所选单元格中添加了一个标签,然后didSelectRow...重新加载了tableView.在heightForRow...选定的单元格中展开.希望你能得到这张照片.

didSelectRow...我必须reloadData,而不是开始/结束更新.我想要做的是reloadData并让它动画.我可以这样做:

[UIView transitionWithView: tableView
                  duration: 0.40f
                   options: UIViewAnimationOptionTransitionCrossDissolve
                animations: ^(void)
 {
   [self.tableView reloadData];
 }
                completion: nil
 }];
Run Code Online (Sandbox Code Playgroud)

这就是正在改变的细胞的交叉溶解.我想要的是UITableViewRowAnimationTop,但显然在转换选项中是不可能的.有没有办法reloadData和使用UITableViewRowAnimationTop

bra*_*ipt 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)
Run Code Online (Sandbox Code Playgroud)


ozg*_*gur 8

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

NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [tableView numberOfSections])];

[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationAutomatic];
Run Code Online (Sandbox Code Playgroud)

好的,我骗了.它可能是可动画的,但它需要很多关于QuartzCore Framework如何在UI组件上运行的知识.

@import QuartzCore;
Run Code Online (Sandbox Code Playgroud)
[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"];
Run Code Online (Sandbox Code Playgroud)