HOME » Natsu note » iOS » [iOS5] UITableViewCellの背景色が変更されている!

[iOS5] UITableViewCellの背景色が変更されている! 2011/12/07/|iOS,

iOS 5でこっそりと変更になっていたことに気がついたことのひとつとして、UITableViewCellのデフォルト背景色があります。

背景色が変更された!

UITableViewCellをinitWithStyle:で作成すると、iOS 4までは背景が白(R:1.0, G:1.0, B:1.0)のセルが作成されていました。

ところが!

iOS 5では、なんと真っ白ではないのです。背景色は(R:0.97, G:0.97, B:0.97)となっていました。びっくり。

カスタムセルを作っている場合には注意が必要

背景色が変更になっているため、デフォルトのセル上に別のUILabelなどを乗せて独自のカスタムセルを作っている場合には注意が必要になります。

subViewの背景は透過させない方がパフォーマンスがよくなるというので、あえて、背景色を白にしたUILabelを乗せていたのですが、残念なことにOS 5になったらここだけ微妙に色が合っていませんでした。しかも、デバイスの輝度を下げているとなかなか気がつきにくいのでご注意を。

対処方法

subViewすべての背景を(R:0.97, G:0.97, B:0.97)にすればいいかというと、そうではありませんよね。もちろん、Deploypment TargetがOS5.0以上なら問題ありませんが、OS 4以下もサポートするアプリではそうはいきません。今度は、OS4以下でセルの背景色とsubViewの背景色が合わなくなってしまいます。

そんなわけで、カスタムセルのクラス(UITableViewCellのサブクラス)で真面目にsetBackgroundColor:メソッドをオーバーライドしましょう。

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

これで、subViewの背景色はいつでもセルの背景色と一致します。

もちろん、OSバージョンを見て背景色を分けてもいいですが、できるだけハードコーディングは減らした方がいいと思うので、setBackgroundColor:メソッドのオーバーライドがお勧めです。

これなら、次のバージョンでさらに背景色が変更になってももう心配はいりません。

そもそも、最初から真面目に実装していればよかったものの、ちょっと(本当にちょっと・・・)横着をしていました。この横着が、今回のような事態を招いてしまったわけで、これからは気をつけていこうと思います。反省。。