1

UITableViewアプリケーションの設定ビューに静的セルを使用しています。

このテーブルのセクションの1つには2つのセルが含まれ、2番目のセル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が、それでも完璧ではありません。

セクションをスクロールして表示しないように戻すと、再び正常に見えます。

編集:問題のスクリーンショットをいくつか撮りました:
画像の例

前後に追加beginUpdatesしてみましたが、何も変わりませんでした。作品の代わりに使用していますが、アニメーションはまったくありません。endUpdatesreloadSectionsreloadDatareloadSections

テーブルのセルが静的であるためですか、それとも何かが足りないためですか?

4

1 に答える 1

1

この方法で問題が解決すると思います。

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

データソースを更新するだけです(いくつかのフラグに応じてセクション数を更新しているため、必要はありません)、それを呼び出します。

代わりにこの方法を使用する必要があるかもしれません。

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