在UITableView中使用静态单元格中的reloadSection时出现动画故障

时间:2013-01-10 11:22:50

标签: ios animation uitableview

我正在使用带有静态单元格的UITableView作为我的应用程序的设置视图。

此表的其中一个部分包含两个单元格,第二个单元格仅在第一个单元格中包含UISwitch时才可见。

所以UISwitch的目标就是:

- (void)notificationSwitchChanged:(id)sender
{
  UISwitch* switch = (UISwitch*)sender;

  self.bNotify = switch.on;
  [self.settingsTable reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop];
}

我以这种方式实施numberOfRowsInSection:

(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
  if (section != 1)
    return [super tableView:tableView numberOfRowsInSection:section];

  if (self.bNotify)
    return 2;
  return 1;
}

这个“有效”,但是动画有问题,使得第一个单元格消失或向上滑动到上一部分的中间位置或各种东西,具体取决于我选择的动画类型。最干净的是UITableViewRowAnimationNone,但仍然不完美。

如果我将视图滚出视图并向后滚动它再次显示正常。

编辑:拍了几张问题的截图:
Example Image

我尝试在beginUpdates之前和之后添加endUpdatesreloadSections,但它没有改变任何内容。使用reloadData代替reloadSections可以使用,但根本没有动画。

是因为桌子的单元格是静态的还是我遗漏了什么?

1 个答案:

答案 0 :(得分:1)

我认为这种方法可以解决您的问题。

[self.tableView insertSections:<#(NSIndexSet *)#> withRowAnimation:<#(UITableViewRowAnimation)#>];

只需更新数据源(您不必这样做,因为您正在根据某些标志更新部分计数)并调用它。

也许你必须改用这种方法。

[self.tableView insertRowsAtIndexPaths:<#(NSArray *)#> withRowAnimation:<#(UITableViewRowAnimation)#>];