UITableViewCellの背景色は、iOS5とiOS4では異なります

グループ化された UITableViewCell は、iOS 5では通常の whiteColor の代わりに tableCellGroupedBackgroundColor の色を使用します。 UITableViewCell (Default、Subtitle、Value1、Value2スタイルのセル)のものと一致します。

カスタムの UITableViewCell およびデフォルトの UITableViewCell (および関連付けられた UILabel およびその他の要素)で同じ背景色が使用されることを確認する最適な方法は何ですか? iOS4とiOS5の両方

注:エディタでは、 tableCellGroupedBackgroundColor という名前で新しい色を見ることができますが、この色をプログラムで取得するためのカテゴリ/メソッドはありません。

編集:

次の手法を使用して、セルのコントロールの背景色を変更できますが、カスタムセルの場合、OS(iOS 4 vs iOS 5)に基づいて適切な背景色を設定する方法はありますか?

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    for (UIView* view in cell.contentView.subviews) {
        view.backgroundColor = cell.backgroundColor;
    }
}

Easiest solution (my current implemented): This just makes sure that all my cells have white background, irrespective of the OS. Somehow, i don't need to apply white color to cell.contentView.subviews.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    [cell setBackgroundColor:[UIColor whiteColor]];
}
5

3 答え

私たちが堅実な背景色、勾配などを扱っていると仮定すると、それを行うための素早く汚れた方法があります。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    for (UIView *subview in [cell.contentView subviews]) {
        subview.backgroundColor = cell.backgroundColor;
    }
}

iOS 5では、見苦しいビューラインを避けることができます。 :)

3
追加された

UITableViewCell をサブクラス化する場合は、 setBackgroundColor をオーバーライドすることもできます。

- (void)setBackgroundColor:(UIColor *)backgroundColor {
    [super setBackgroundColor:backgroundColor];
    [[self myLabel] setBackgroundColor:backgroundColor];
}

このメソッドは、セルのデフォルトの背景色を設定するときにiOSによって使用されるようです。

0
追加された

あるいは、あなたのサブビュー(ラベルなど)のbackgroundColorを[UIColor clearColor]に設定することもできます

0
追加された
これは、どのビューでもバックグラウンドの透明色を設定してパフォーマンスを低下させる良いアイデアではありません。グラデーションの背景が必要ない場合は、背景を不透明に設定する必要があります。これはAppleが推奨するものであり、これも私の経験です...
追加された 著者 Borut Tomazin,