添加具有行动画的单元格时,将tableview保持在相同的滚动位置

时间:2014-08-08 17:29:29

标签: ios objective-c xcode uitableview

我的应用中有一个tableview,显示了一个日历项列表。选择单元格后,我设置了在基于时间的表格视图中显示所有日历项目的功能。为此,我插入空白单元格来表示未使用的时间。

问题是当我添加单元格时,tableview会滚动到顶部。我已经尝试在添加单元格后设置内容偏移但行动画变得越来越多。我知道我可以在数组中添加新项目并调用reloadData,但这意味着我错过了动画。

E.g 我上午9点有一个小时的会议,上午11点有一个小时的早午餐。首先,它们彼此相邻以便于阅读。 当我选择上午11:00的单元格时:

  • 应在上午9:00的单元格上方添加8个空白单元格,以代表会议前的8个空闲时间

  • 应在上午9:00到上午11:00之间添加一个空白单元格,以表示我的会议和早午餐之间的空闲时间

  • 早午餐后应添加13个空白单元格以显示当天最后13个空闲时间。

当我开始上午11:00时,早午餐是第二个从顶部开始的细胞。当tableview扩展时,我希望这个单元格保持在其位置,而其他单元格围绕它进行动画处理。会议单元格应向上移出屏幕,为其下方的空白单元格腾出空间。

我试图通过创建一个索引路径数组来添加空白单元格并调用

来实现此目的
[_tableView insertRowsAtIndexPaths:blankArray withRowAnimation:UITableViewRowAnimationFade]

然后我计算并设置tableview的内容偏移量,以使早午餐单元保持在同一位置。

问题在于,当设置内容偏移时,单元格仍然是从顶部开始动画。这意味着为了使早午餐下方的单元格出现,它们必须首先从桌面视图的顶部向下ping屏幕。导致闪烁。早午餐和会议单元格也不顺畅 - 会议单元似乎消失了,而不是从屏幕上向上滑动。

我考虑过编写自己的tableview,但这似乎是一项艰巨的任务。

任何允许我添加具有行动画的单元格同时将所选单元格保持在同一位置的解决方案都会有所帮助。

1 个答案:

答案 0 :(得分:-1)

在iOS 6及更高版本中,如果为表视图的restorationIdentifier属性分配值,它会尝试保留当前选定的行和第一个可见行。转到main.storyboard选择tableView然后单击tableviews身份检查器您将看到一个名为Restoration ID的部分,其中包含任何内容。 BOOM MAGIC它自己工作。