在 reloadSections 后 TableView 部分变为隐藏

Posted

技术标签:

【中文标题】在 reloadSections 后 TableView 部分变为隐藏【英文标题】:TableView sections become hidden after reloadSections 【发布时间】:2013-09-27 15:09:59 【问题描述】:

我的问题如下:有一个由标题组成的表格。当您单击标题时,它会在之后重新启动

[self.tableView reloadSections: [NSIndexSet indexSetWithIndex: section] withRowAnimation: UITableViewRowAnimationAutomatic];

实际上,在早期版本(ios 6.1.3 及更低版本)中,重新加载了单元格,一切都很好。在 iOS7 上,单元格变得隐藏。它是什么以及如何解决它?不仅是被点击的单元格,还有下一个位置(更低或更高)。

<MyHeaderCell: 0x146ea600; baseClass = UITableViewCell; frame = (0 0, 320 75); hidden = YES; autoresize = W; gestureRecognizers = <NSArray: 0x146e10c0>; layer = <CALayer: 0x146e95d0 »

基本上,这是日志中的问题之一。可以清楚地看到细胞被隐藏了。

不过,当我使用[self.tableView reloadData]; 时,一切都很好,但我需要动画。

【问题讨论】:

那么,单击标题并触发重新加载,以及“不仅仅是单击的单元格”?我很困惑,您需要显示更多代码。 【参考方案1】:

这是一个老问题,但我想我知道是什么原因造成的。

在您自己保留对它的引用的意义上,这是一个“静态”单元格吗?在这种情况下,问题可能是这样的:

当您进行动画重新加载时,表格视图将淡出现有单元格,同时淡入新单元格。问题是,当“新”单元格与旧单元格完全相同时,同一个单元格将同时淡入和淡出!在您的情况下,淡出动画优先并且单元格被隐藏。

如果通过始终重用单元格而不是使用相同的引用来解决此问题,但是,我知道这并不总是最佳的。

【讨论】:

【参考方案2】:

[tableView reloadSections:withRowAnimation] 之后立即调用[tableView reloadData] 可以修复它而不会显着影响动画。

【讨论】:

我们通常调用reloadSection来避免调用reloadData,因为它很昂贵,它会重新加载所有tableView。或者,您可以在需要刷新 tableview 时调用 reloadData

以上是关于在 reloadSections 后 TableView 部分变为隐藏的主要内容,如果未能解决你的问题,请参考以下文章

调用 reloadSections:withRowAnimation 后,使用 IB 创建的自定义单元格被隐藏:

UITableView 中的 reloadSections 弹回顶部

尝试使用 reloadsections 重新加载时,节中的行数无效

UITableView 在调用 reloadSections:withRowAnimation: [重复] 后跳转

reloadSections:withRowAnimation 动画出现问题

UITableView reloadData、reloadSections:withRowAnimation: 和 reloadRowsAtIndexPaths:withRowAnimation: 的