iOS 7 でテーブルビューの表示位置を微調整する : iPhone プログラミング
SPECIAL
.auto-style1 {
border-style: solid;
border-width: 1px;
}
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 で実行されたときだけ設定するといったことも可能です。
[ もどる ]