読者です 読者をやめる 読者になる 読者になる

24/7 twenty-four seven

iOS/OS X application programing topics.

iPhone アプリにおいて Interface Builder を使って Grouped Style の UITableView を作るときは separatorStyle の値に注意

iPhone Xcode Objective-C Cocoa

Grouped スタイルのテーブルビューを使用した iPhone アプリケーションの中に、下の画像のように先頭セクションの区切り線が2重に表示されているものをチラホラ見かけます。
実用上の問題は無いのですが、ちょっと不恰好なので気になりますよね。



この現象は、UITableView の separatorStyle に UITableViewCellSeparatorStyleSingleLineEtched が指定されていることが原因で発生します。

コードでインスタンスを生成した場合の separatorStyle デフォルト値は UITableViewCellSeparatorStyleSingleLine なのですが、Interface Builder で UITableView を Grouped スタイルで作成した場合はデフォルト値として UITableViewCellSeparatorStyleSingleLineEtched が自動的に選択されるようになりました。
(もともとはそんなことはなかったのですが、UITableViewCellSeparatorStyleSingleLineEtched が iOS SDK 3.2 から導入され、おそらくそのあたりのタイミングで動作が変更されたようです。)


ということですので、iPhone の場合に Grouped スタイルのテーブルビューを Interface Builder を使って作成するときは、separatorStyle の値を UITableViewCellSeparatorStyleSingleLine など、UITableViewCellSeparatorStyleSingleLineEtched 以外に設定しましょう。

コードでインスタンスを生成した場合のデフォルト値は UITableViewCellSeparatorStyleSingleLine ですので問題はありません。



公式のドキュメントによる言及が見つからないのですが、UITableViewCellSeparatorStyleSingleLineEtchedは(おそらく)iPad 専用の値です。
次のように iPad で Grouped Style のテーブルに対して指定した場合はキレイにハマります。



というわけで、コードで作る場合にはデフォルト値はドキュメントに書いてあるとおりなのですが、Interface Builder を使って作る場合にはデフォルト値は (IB が空気を読んで?) ドキュメントと異なる場合が多いので注意したほうがいいですね。

Interface Builder で作った場合とコードで書いた場合のデフォルト値の違いは、ほかにも各種ビューの backgroundColor や autoresizingMask などがありますので、余計な色が付いていないかどうかなど、きちんと確認したほうがいいでしょう。


東日本大震災緊急支援募金募集中。国際NGOワールド・ビジョン・ジャパン