79

我有一个UITableView从数组和下拉列表中填充的内容。
如果我选择下拉列表的任何行,数组将插入新值,并且 tableview 应该重新加载。

如何使用新的数组内容为 tableview 设置动画?

像我想一一显示行的动画。我试过这个方法

- (void)reloadRowsAtIndexPaths:(NSArray )indexPaths withRowAnimation:(UITableViewRowAnimation)animation { 
NSIndexPath rowToReload = [NSIndexPath indexPathForRow:[names count] inSection:0];
 NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil]; 
[tableDetails reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
 }
4

11 回答 11

125

要添加正确答案,如果您想重新加载您的所有部分,您UITableView需要执行以下操作:

对象

NSRange range = NSMakeRange(0, [self numberOfSectionsInTableView:self.tableView]);
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:range];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationAutomatic];

迅速

let range = NSMakeRange(0, self.tableView.numberOfSections)  
let sections = NSIndexSet(indexesIn: range)               
self.tableView.reloadSections(sections as IndexSet, with: .automatic) 

这将使用动画重新加载表格视图中的所有内容。如同一位老板。

于 2014-01-20T16:45:59.057 回答
74

斯威夫特 5:

UIView.transition(with: tableView, duration: 1.0, options: .transitionCrossDissolve, animations: {self.tableView.reloadData()}, completion: nil)

斯威夫特 3

UIView.transition(with: myTableView, duration: 1.0, options: .transitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)

斯威夫特 2

UIView.transitionWithView(myTableView, duration: 1.0, options: .TransitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)

我在 Swift 中使用了这个

于 2016-07-14T15:43:55.247 回答
54

使用这种方法,

[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
于 2013-01-29T06:43:58.467 回答
25

在 Swift 3 中,您可以简单地将以下内容添加extensionUITableView

extension UITableView {
    func reloadData(with animation: UITableView.RowAnimation) {
        reloadSections(IndexSet(integersIn: 0..<numberOfSections), with: animation)
    }
}
于 2017-01-06T19:44:52.223 回答
23

你首先告诉 tableView 期待更新beginUpdates。然后更新相关部分(如果您的 tableView 只有一个部分,则只需为部分编号传递零)。在这里您可以指定动画 - 您可以使用它来获得您想要的效果。之后,您调用endUpdatestableView。UITableViewRowAnimation 的 typedef 指定:

typedef enum {
   UITableViewRowAnimationFade,
   UITableViewRowAnimationRight,
   UITableViewRowAnimationLeft,
   UITableViewRowAnimationTop,
   UITableViewRowAnimationBottom,
   UITableViewRowAnimationNone,
   UITableViewRowAnimationMiddle,
   UITableViewRowAnimationAutomatic = 100
} UITableViewRowAnimation;

到处玩,看看你想要哪一个。即使选择UITableViewRowAnimationNone有时也会产生很好的效果。表更新代码如下:

    [self.tableView beginUpdates];
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView endUpdates];
于 2013-01-29T06:53:17.737 回答
8

你可以使用reloadSections:withRowAnimation:函数。检查UITableView 类参考

使用已回答您问题的动画检查此reloadData 。

于 2013-01-29T06:38:51.587 回答
4

tableView 支持以下方法用于动画:

- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);

用法 :

//Reload tableView with animation
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationRight]; 

可用的不同类型的动画是:

typedef NS_ENUM(NSInteger, UITableViewRowAnimation) {
UITableViewRowAnimationFade,
UITableViewRowAnimationRight,           // slide in from right (or out to right)
UITableViewRowAnimationLeft,
UITableViewRowAnimationTop,
UITableViewRowAnimationBottom,
UITableViewRowAnimationNone,            // available in iOS 3.0
UITableViewRowAnimationMiddle,          // available in iOS 3.2.  attempts to keep cell centered in the space it will/did occupy
UITableViewRowAnimationAutomatic = 100  // available in iOS 5.0.  chooses an appropriate animation style for you    };

希望这可能会有所帮助!

于 2013-12-24T14:11:34.917 回答
4

我已经尝试过了,我的动画TableAnimated流畅

//将此代码放在要重新加载表格视图的位置

dispatch_async(dispatch_get_main_queue(), ^{
    [UIView transitionWithView:<"TableName"> 
                      duration:0.1f 
                       options:UIViewAnimationOptionTransitionFlipFromRight 
                    animations:^(void) {
                        [<"TableName"> reloadData];
                    } completion:NULL];        
});
于 2016-02-24T06:02:50.200 回答
3

尝试在重新加载 UITableView 时更改视图时设置动画

[UIView transitionWithView:_yourTableView 
                  duration:0.40f 
                   options:UIViewAnimationOptionTransitionCrossDissolve 
                animations:^(void) {[_yourTableView reloadData];}  
                completion:nil];
于 2016-01-22T19:48:29.990 回答
1

斯威夫特 5:

let section = 0
tableView.reloadSections([section], with: .automatic)
于 2020-02-20T11:38:23.837 回答
0

在将显示单元格粘贴此代码它将动画添加新单元格到表格视图

let rotationTransform = CATransform3DTranslate(CATransform3DIdentity, 0, 50, 0) 
cell.layer.transform = rotationTransform
cell.alpha = 0.0
 UIView.animate(withDuration: 0.05 * indexPath.row) {
           cell.layer.transform = CATransform3DIdentity
           cell.alpha = 1.0
       }
于 2021-09-17T07:29:03.713 回答