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

Ios 添加带有行动画的单元格时,将tableview保持在相同的滚动位置,ios,objective-c,xcode,uitableview,Ios,Objective C,Xcode,Uitableview,我的应用程序中有一个tableview,其中显示日历项目的列表。选择单元格后,我已设置了在基于时间的表视图中显示所有日历项的功能。为此,我插入空白单元格来表示未使用的时间 问题是,当我添加单元格时,tableview会滚动到顶部。我尝试在添加单元格后设置内容偏移量,但行动画出现问题。我知道我可以在数组中添加新项目并调用reloadData,但这意味着我错过了动画 例如 我上午9点有一个小时的会议,11点有一个小时的早午餐。首先,为了便于阅读,它们彼此相邻显示。 当我选择上午11:00单元格时:

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

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

例如 我上午9点有一个小时的会议,11点有一个小时的早午餐。首先,为了便于阅读,它们彼此相邻显示。 当我选择上午11:00单元格时:

  • 应在上午9:00单元格上方添加8个空白单元格,以表示开会前的8个空小时

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

  • 早午餐后应添加13个空白单元格,以显示一天中最后13个空小时

当我开始在上午11:00的早午餐牢房是从顶部开始的第二个牢房。当tableview展开时,我希望此单元格保持在其位置,而其他单元格在其周围设置动画。会议单元格应该从屏幕上向上移动,以便为下面的空白单元格留出空间。

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

[_tableView insertRowsAtIndexPaths:blankArray withRowAnimation:UITableViewRowAnimationFade]
然后,我计算并设置tableview的内容偏移量,以使早午餐单元格保持在相同的位置

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

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


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

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

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

找到了解决方案。不是很优雅但是很管用。我创建所有可见单元的快照,计算单元展开时将具有的帧,然后将快照设置为此帧的动画。完成后,我删除快照,重新加载tableview并设置内容偏移量。以下是我在swift中的答案:,转换为objective-C不会太难,我想我找到了解决方案。不是很优雅但是很管用。我创建所有可见单元的快照,计算单元展开时将具有的帧,然后将快照设置为此帧的动画。完成后,我删除快照,重新加载tableview并设置内容偏移量