概要: 編集モードで、デフォルトの赤いマイナス記号と削除確認ボタンではなく、カスタム編集コントロールを使用してテーブル ビューの行を削除しています。1 つまたは複数の行にチェックを入れてから、ツールバーの [削除] ボタンをタップします。これは、メール アプリで見られる動作に似ています。以下のスクリーンショットを参照してください。
問題: の呼び出しによって生成されるアニメーションdeleteRowsAtIndexPaths:withRowAnimation:
が不規則です。たとえば、下の行のアニメーション (つまり、UITableViewRowAnimationBottom
) を使用して、スクリーンショットでチェックされた行 (件名 #7) を削除すると、次のようになります。
- 被験者 #8 が被験者 #7 の下と後ろに滑り落ちる
- 被験者 #8 は被験者 #7 の背後に一時的に隠れています
- 件名 #8 が件名 #7 を耳障りに置き換えます
これは、シミュレーターとデバイスの両方で発生しています。自動アニメーション タイプ (つまりUITableViewRowAnimationAutomatic
) は、上記のサブジェクト #7 を削除するときに、同じ不規則な動作を生成します。
トップ アニメーション タイプは、シミュレーターでは期待どおりに動作しますが、デバイス上では一貫性のない不快なアニメーションが生成されます。
フェード タイプのアニメーションは、シミュレーターとデバイスの両方で期待どおりに動作する唯一のアニメーションです。
詳細:
私は iOS 7 をターゲットにしており、ストーリーボード、純粋な自動レイアウト、および Core Data を使用しています。
行を削除するアクションメソッドは次のとおりです。
- (void)deleteButtonTapped:(UIBarButton *)sender
{
// update table view's data
[self.listOfItems removeObjectsAtIndexes:self.indexSetOfTickedRows];
// create index paths for ticked rows
NSMutableArray *indexPaths = [[NSMutableArray alloc] init];
[self.indexSetOfTickedRows enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
[indexPaths addObject:[NSIndexPath indexPathForRow:idx inSection:0]];
}];
[self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationBottom];
// update Core Data and UI...
}
私が試したこと:
テーブル セルのサブクラスは をオーバーライドしますlayoutSubviews
。ただし、コメントアウトしても不規則なアニメーションが続きlayoutSubviews
ます。
また、テーブル セルからカスタムの目盛り編集コントロールを削除し、アクション メソッドで特定の行の削除をハードコーディングしました。不規則なアニメーションが続きました。
deleteRowsAtIndexPaths:withRowAnimation:
他の人が示唆したように、との呼び出しの間に呼び出しをbeginUpdates
試みましたendUpdates
。これで問題は解決しません。
次に何をすべきかについての提案、またはこれらの不規則なアニメーションが表示される理由についての最善の推測はありますか?
更新 (iOS 7.1):
iOS 7.1 をターゲットにした後も問題が残ります。引き続きフェード アニメーションに依存します。