1

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

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

所以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,但仍然不完美。

如果我将该部分滚动出视图并返回,它看起来又正常了。

编辑:对问题进行了一些截图:
示例图像

我尝试在之前和之后添加beginUpdates和,但它没有改变任何东西。使用而不是作品,但根本没有动画。endUpdatesreloadSectionsreloadDatareloadSections

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

4

1 回答 1

1

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

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

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

也许您必须改用此方法。

[self.tableView insertRowsAtIndexPaths:<#(NSArray *)#> withRowAnimation:<#(UITableViewRowAnimation)#>];
于 2013-01-10T17:53:38.213 回答