奇怪的tableView选择行时的行/截面动画

时间:2016-06-03 19:41:27

标签: ios swift uitableview

这个很酷的expanding tableView效果很好但是当你选择一些行时,就会出现一个奇怪的动画。

该表有多个部分,每个行在单击时都可以显示其他行。行外观和行为使用各种值在plist中构造,例如如果plist中的行的布尔“isExpandable”属性设置为true且其“additionalRows”属性设置为2,则该行可以展开以显示2个子行。

该表的问题是,当单击每个部分中的第一个单元格时,动画运行正常,但是当单击其他单元格时,它们会随机播放: -

enter image description here

我怀疑发生了奇怪的动画,因为在ViewController文件中的didSelectRowAtIndexPath下,由于此行单击了单元格,所有部分都会重新加载: -

    tbl.reloadSections(NSIndexSet(index: indexPath.section), withRowAnimation: .Automatic)

我已尝试过以下操作,但它们会导致应用程序崩溃或导致单元格无法扩展: -

  • 将动画方法设置为.None
  • 改为使用reloadData
  • 存储selectedRow及其子行的indexPaths,然后使用reloadIndexPaths重新加载
  • 存储所选单元格及其子单元格的行,然后在单击行时重新加载它们

在实际站点上发布代码的人建议使用insertRowsAtIndexPath和deleteRowsAtIndexPath而不是reloadSection,但我不知道该怎么做。非常感谢您的帮助。

修改   - 还尝试了insertRowsAtIndexPath和deleteRowsAtIndexPath,但它似乎与tableView模型的设置和应用程序崩溃的方式冲突。

2 个答案:

答案 0 :(得分:0)

在表中插入行可以帮助您获得更一致的表视图动画行为。

要在特定索引路径处插入行,您可以使用' insertRowsAtIndexPaths'方法。您将需要生成要插入的每个索引路径,然后将它们传递给数组中的方法。

ObjC:

NSArray* arr = your NSIndex Paths...;

[tableView insertRowsAtIndexPaths:arr withRowAnimation:UITableViewRowAnimationFade];
斯威夫特:

table.insertRowsAtIndexPaths([IndexPaths..], withRowAnimation: .Automatic)

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/#//apple_ref/occ/instm/UITableView/insertRowsAtIndexPaths:withRowAnimation

答案 1 :(得分:0)

问题在于:reloadSections(..)使tableView方便地从模型中获取所有最新数据(对于指定的部分),代价是更“模糊”的动画。对于您要查找的行为,请使用insertRowsAtIndexPaths(..) .Top动画样式。如果您的数据模型存在问题,请先修复它(因为以后几乎肯定会打扰您)。