3

UITableViewController を作成しました。その中で、viewForHeaderInSection からヘッダーに返されるカスタム ビューを作成します。編集モードに入ってセルを並べ替えると、並べ替えられたセルがスクロール中にカスタム ヘッダー ビューの上に浮かびます。これは、テーブルビューが [tableview reload] でリロードされるまで続きます。並べ替えからドロップされた後、セルがビュー スタックの一番上に移動されたかのようです。

moveRowAtIndexPath メソッドの最後にある [tableView reload] で問題を回避しましたが、これが予想される動作であるかどうかを知りたいです。ドキュメントやグーグルでそれについて何も見つけることができませんでした。

4

2 に答える 2

3

これは UITableView のバグだと思います。moveRowAtIndexPath メソッドの実行中にテーブルのビュー階層を調べると、問題のセルが階層の最上部近くにあることがわかります。これは、セルをドラッグするときの外観をサポートするためです。

このメソッドでも、ビューを階層の後ろに単純に移動することはできません。これは、それをオーバーライドしているように見えるアニメーションが配置されているためです。

データ更新メソッド内から行をリロードするのが苦手だったので、私の解決策は次のコードを含めることでした。

UITableViewCell *movedCell = [tableView cellForRowAtIndexPath:fromIndexPath];
double delayInSeconds = 0.4;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [tableView sendSubviewToBack:movedCell];
});

0.4 秒の遅延は、セルのアニメーションが完了するまでの時間を与えるためのものです。

Radar'd: http://openradar.appspot.com/radar?id=2681402

于 2013-02-07T12:27:01.700 に答える