11

概要: 編集モードで、デフォルトの赤いマイナス記号と削除確認ボタンではなく、カスタム編集コントロールを使用してテーブル ビューの行を削除しています。1 つまたは複数の行にチェックを入れてから、ツールバーの [削除] ボタンをタップします。これは、メール アプリで見られる動作に似ています。以下のスクリーンショットを参照してください。

ここに画像の説明を入力

問題: の呼び出しによって生成されるアニメーションdeleteRowsAtIndexPaths:withRowAnimation:が不規則です。たとえば、下の行のアニメーション (つまり、UITableViewRowAnimationBottom) を使用して、スクリーンショットでチェックされた行 (件名 #7) を削除すると、次のようになります。

  1. 被験者 #8 が被験者 #7 の下と後ろに滑り落ちる
  2. 被験者 #8 は被験者 #7 の背後に一時的に隠れています
  3. 件名 #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 をターゲットにした後も問題が残ります。引き続きフェード アニメーションに依存します。

4

3 に答える 3

0

追加[tableView beginUpdates];してみてください[tableView endUpdates];

于 2014-01-30T11:50:00.760 に答える
0

セルにアルファを設定すると、ここで提案されているように機能する可能性があります。よくわかりません。 iOS7 で TableView の最後の行を削除するときのアニメーションの問題

于 2014-03-13T11:23:42.210 に答える