iOS 7 でテーブルビューの表示位置を微調整する : iPhone プログラミング

SPECIAL


iOS 7 でのテーブルビューの表示位置を微調整するには

iOS 7 になって UIViewController のルートビューがフルスクリーンとして扱われ、ステータスバーがその上に重ねて表示されるようになりました。

ただ、Xcode 4 で作成したプロジェクトを開いたからなのかもしれないですけど、UITableViewController を配置したビューだけが、従来通りステータスバーの表示分を空けてずらされて表示される場合がありました。

ステータスバーの色はルートビューの背景色に自動で合わされるようで、気にしなければそれで済むことも多そうですけど、たとえば UITableView の tableHeaderView にはっきりとした色合いのビューを設定していたりすると、少し間が抜けて見えたりもします。

このような場合、iOS 6 と iOS 7 のレイアウトのズレを吸収する でお話しした ΔY に -20 を UITableView に設定しても調整されないようだったので、この場合は別の方法で調整をする必要があります。

テーブルビューのコンテンツ表示位置を調整する

Content Insets を使って微調整する

UITableView のコンテンツ表示領域を調整するには、UITableView の Content Insets を設定します。

Interface Builder であれば、目的の UITableView を選択して、その Size inspector にある "Content Insets" のところで調整できます。Auto Layout が Off に設定されている場合にだけ設定できます。

たとえば iOS 7 で UITableView の tableHeaderView がステータスバーの場所から下にずれている場合は、Content Insets の Top に -20 を設定することで、UITableView とステータスバーとが重なるようになります。

ただ、Interface Builder で設定した Content Insets の値は iOS 6 でも iOS 7 でも同じ値が有効なので、たとえば iOS 7 だけで発生するずれを中和したいときには向きません。

プログラム内から調整する場合

ある特定の条件の時だけ Content Insets を設定したい場合には、プログラムからそれを行う必要があります。

UIEdgeInsets insets = self.tableView.contentInset;

 

insets.top -= 20;

 

self.tableView.contentInset = insets;

このようなコードを UITableViewController から派生したクラスの -viewDidLoad や -viewWillAppear 辺りで記載します。

この方法なら適用する条件をプログラムで制御できるので、たとえば iOS 7 で実行されたときだけ設定するといったことも可能です。

[ もどる ]