2013-10-27 8 views
13

更新:これはiOS 8.0以降で修正されました。詳細については私の受け入れられた答えを見てください。UITableViewの最後の行を削除するときのアニメーションの問題

私はiOS 7 UITableViewを使用して、行をスワイプすることができます。で

tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

:私はで削除を処理してい

[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop]; 

すべての行は、テーブル内の最後のものを除いて、正しいアニメーションで削除されます。ユーザーが削除ボタンを表示するためにスワイプした後、タップすると、セルは左の画面から完全にスライドしますが、白いセルの後ろに削除ボタンが数秒間残っています。これはすべての細胞で起こっているように見えますが、他のすべての細胞はそれらの下を横切ってスライドしてそれを覆っています。

これは、問題の行がテーブル内の唯一の行で、行の代わりにセクション全体が削除される場合にも発生します。セクションヘッダーが忘却に滑りますが、削除ボタンが付いた白いセルはちょっとしたことがあります。

私は、この最後のセルに他と同じUITableViewRowAnimationTopアニメーションを持たせたいと思います。何が起こっているのアイデア?

+3

この問題はまったく同じです。私はそれがちょうどiOS 7のUITableViewのバグだと確信しています。 – patr1ck

+0

UPDATEに感謝します。代わりにあなたのアップデートを回答として追加できますか?あなたの質問に十分に答えたらそれを受け入れることさえできます。より良い答えを挿入することができ、その答えを受け入れることさえできます。 –

答えて

4

更新:このバグはiOS 8で修正されました。最後のセルの削除は、左にスライドし、削除ボタンは上にスライドし、背景はクリアです(アニメーションの後に白い領域がもう消えないコンプリート)。

iOS 7修正: 十分に高いセクションヘッダービューを持つ別のセクションをテーブルの最後に追加することで、この問題を解決できました。このヘッダービューは、表の下部にある空白のように見えるので、そこには表示されません。テーブルの最後の行が削除されると、この空白のセクションヘッダーが上にスライドして、そこに残っている削除ボタンが隠されます。これはちょっとしたハックですが、テーブルビューのバグのようです。

+0

現在のところ、これは私にとって唯一純粋な解決策です。唯一の注意点は、細胞に透明な背景を使用できないことです。 – Eonil

0

私は、テーブルビューの最後の行の下に空の行を常に維持することをお勧めします。それはトリックを行います。

1

フランク・リー氏が言及している空の行を続けるトリックの代わりに、私は最後の行の削除を特別に扱うことによってこの醜い不具合を回避しました。セルをアニメーション化するのではなく、テーブルビューの-reloadDataを呼び出します。

アニメーションは表示されませんが、グリッドは表示されないため、テーブルビューは壊れて見えません。価値あるトレードオフ。

0

またUITableView.tableFooterViewプロパティを使用することができます。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    ... 

    CGRect frame = [self.tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 
    UIView *view = [[UIView alloc] initWithFrame:frame]; 
    view.backgroundColor = self.tableView.backgroundColor; 
    self.tableView.tableFooterView = view; 
} 

このコードはUITableViewを保持するビューコントローラに入ります。

  • コードはARCを前提としています。
  • テーブルの背景イメージを使用すると、別の話です。
  • コードは "if(iOS> 7)"節で囲むことができます。
+1

このソリューションは、空のテーブルに通常表示される行線を削除します。テーブルビューの在庫表示を維持するソリューションが望ましいでしょう。 –

0

私の解決方法は、削除されているセルを隠すことによって壊れたアニメーションを無効にすることでした。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.hidden = YES; 
} 
関連する問題