10

私のアプリは、UIPopoverController のコンテンツ ビュー コントローラーである UINavigationController の子である UITableViewController を使用します。UITableViewController の UITableView の外観をカスタマイズしています。iOS 5 および 6 では問題なく動作しますが、iOS 7 では問題があります。セルのセパレーターは白に設定されており、テーブル ビューは最初は正しいセパレーターの色で表示されます。ただし、テーブル ビューをスクロールしてセルがリロードされると (cellForRowAtIndexPath および willDisplayCell 関数が呼び出されることを意味します)、新しくリロードされたセルのセパレータはすべて黒になります。

UITableViewController の viewDidLoad 関数でこの関数を呼び出して、セパレーターの色をカスタマイズしています。

self.tableView.separatorColor = [UIColor whiteColor];

アプリの他の場所 (UIPopoverController ではなく) でまったく同じテーブル ビューを使用する場合、この問題は発生しません。

私が知る限り、これが iOS 7 では 5 または 6 とは異なる動作をするはずであることを示すドキュメントは何もありません。iOS のバグでしょうか? どんな助けでも大歓迎です。

4

4 に答える 4

1

この iOS バグは、iOS7.0.6 でも発生します。背景が黒で区切り線が白のテーブルがありました。区切り線は、最初のビューでは白で正しく表示されてUIPopoverいましたが、同じポップオーバーの 2 回目以降の表示では黒く表示されていました。

テーブルビューで reloadData を使用しても役に立ちませんでした。

私が見つけた唯一の実用的な回避策は次のとおりでした。これにより、テーブル全体が再描画されます。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}

ノート

1)viewWillAppearコードのみを使用すると、区切り線が一瞬正しく表示されてから、再び黒くなります。コードのみを使用するviewDidAppearと、ポップオーバーが表示された後、区切り線が白に変わるまでにかなりの遅延があります。BOTH を使用すると、視覚的に最もシームレスな結果がユーザーに提供されます。

2) テーブルに複数のセクションがある場合は、ポップオーバーが非表示になる前にユーザーが別のセクションにスクロールした可能性があるため、すべてのセクションが再読み込みされていることを確認する必要があります。

PS - さらにテストした結果、このソリューションでさえ完璧ではないことがわかりました。再表示後にテーブルをスクロールすると、最初は画面外にあったセパレータが再び黒に戻ります。したがって、テーブルにポップオーバーのサイズを超える十分な行がない場合にのみ正しく機能します。

于 2014-03-04T00:25:16.557 に答える
1

これをセットviewwillAppear

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
        self.tableView.separatorColor = [UIColor whiteColor];
    }

お役に立てれば

于 2013-10-25T04:03:58.667 に答える