2011-10-28 12 views
5
UITableViewCellグループ化された UITableViewCellは、iOS 5では通常の whiteColorカラーの代わりに tableCellGroupedBackgroundColorカラーを使用します。その結果、カスタムセルのバックグラウンドは UITableViewCell(Default、Subtitle、Value1、Value2スタイルのセル)のバックグラウンドと一致しません。

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

カスタムUITableViewCellとデフォルトのUITableViewCell(および関連付けられているUILabelなどの要素)で同じ背景色が使用されていることを確認する最善の方法 - w.r.t. iOS4とiOS5の両方

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

編集:

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

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

最も簡単なソリューション(私の現在の実装): これは、OSに関係なく、すべてのセルが白い背景を持つようにします。何とか、私はcell.contentView.subviewsに白い色を適用する必要はありません。

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

答えて

3

をあなたのサブビューのbackgroundColorの(ラベルなど)を設定することができますがここでは、単色の背景を扱っている前提、それを行うには1間に合わせと-方法です色、勾配などがない。

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

iOS 5では、見苦しい表示行を避けることができます。 :)

0

代わりに[UIColor clearColor]に

+2

これは、どのビューのバックグラウンドでも透明な色を設定すると、パフォーマンスが低下することはありません。グラデーションの背景が必要ない場合は、背景を不透明に設定する必要があります。これはAppleが推奨するものであり、これも私の経験です... –

0

あなたがUITableViewCellをサブクラス化した場合、あなたはまた、setBackgroundColorをオーバーライドしてみてください:

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

それは、セルのデフォルトの背景色を設定した場合、このメソッドは、iOS版で使用されていることが表示されます。

関連する問題