如何重新加载具有不同行数的UITableView部分?

时间:2017-05-18 14:48:55

标签: ios swift uitableview swift3

这是一个简单的想法,但我似乎无法找到正确的解决方案。

我有一个包含许多部分的UITableView,包括标题视图。

我希望能够隐藏/删除我所拥有的部分中的每个tableview单元格,然后用一个漂亮的动画重新加载它们。

我的问题是部分的数量可能与以前不同,并且部分中的行数可能与以前不同...

我不能简单地淡出整个tableview,然后重新加载它,然后将其淡入,因为我需要标题视图始终可见并使用tableview滚动。

我需要删除它们,因为隐藏和显示将是一个带有活动指示器的漂亮“淡入淡出”动画。

3 个答案:

答案 0 :(得分:0)

只需使用tableView方法

[self.tableView insertSections:(nonnull NSIndexSet *) withRowAnimation:(UITableViewRowAnimation)]
[self.tableView insertRowsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *) withRowAnimation:(UITableViewRowAnimation)]

它们将允许您为新行/节的插入设置动画。对于删除,有类似的方法,除了它们被称为“deleteSections ...”和“deleteRowsAtIndexPaths ...”。

请注意,插入/删除后,这些tableView的委托函数将返回当前值:

- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { }
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {}

“正确”表示:插入/删除前的部分/行数量,加上或减去插入/删除后的行数和部分数量。

答案 1 :(得分:0)

您可以使用:

self.tableView.reloadRows(at: [indexPath], with: .fade)

此处索引路径是您要重新加载的特定行。如果要更改行数,则必须更改数据源中的项目数。或者您可以更改numberOfRowsInSection返回的值

答案 2 :(得分:0)

对于链接动画,您可以使用

let pathsForNewCells = [indexPathOne, indexPathTwo, indexPathThree]

myTableView.beginUpdates()
myTableView.insertRows(at: pathsForNewCells, with: [UITableViewRowAnimation])
myTableView.endUpdates()

因此,根据documentation,高度将动画而不重新加载细胞。