UITableViewにセクションがあり、すべてカスタムセクションヘッダービューがあるセットアップがあります。一度に1つのセクションのみが表示可能な行を持つことができます。
他のセル行を表示するエフェクトを作成するには、基本的に次の関数を使用します。
[self.tableView beginUpdates];
if ( sectionHeaderInsert >= 0 && sectionHeaderInsert <= numberOfSectionsInTableView ) {
[ticketReastepsScreenView.tableView insertRowsAtIndexPaths:indexPathsInsert withRowAnimation:UITableViewRowAnimationFade];
}
[self updateTmpSelectedNumberToCurrent];
if ( sectionHeaderRemove >= 0 && sectionHeaderRemove <= numberOfSectionsInTableView ) {
[ticketReastepsScreenView.tableView deleteRowsAtIndexPaths:indexPathsRemove withRowAnimation:UITableViewRowAnimationFade];
}
[self.tableView endUpdates];
これで、最終的に新しいセクションが適切に「開き」、古いセクションが適切に「閉じる」ことが起こります。ただし、画面に収まるセクションがさらにある場合、(部分的に)表示されている最後のセクションは適切に再描画されません。完全に白で覆われています。
すべてのセクションに新しい高さが求められ、新しいビューも求められると思います(これは私が配列で示しています)。次に、ビューは[viewsetNeedsDisplay]を求められます。
最後のセクションヘッダーが消えるように少しスクロールしてから元に戻すと、現在開いているセクションを再度変更するまで、再び表示されます。
UPD:このおかしな動作は、insertRowとdeleteRowを一緒に実行した場合にのみ表示されます。また、1つのセクション(deleteRow)を閉じてから、セクションのタッチアクションで新しいセクション(insertRow)を開くと、動作が異なります。
また、2つのアクションの間にendUpdatesとbeginUpdatesを入れてみましたが、良い結果は得られませんでした。
UPD2:最終位置に移行すると(位置は良好です)、最後のセクションヘッダーが正しくペイントされているのがわかりますが、その後消えます(アニメーションなし、その上に単純な真っ白)