2010年12月04日

UIViewControllerのframe設定

環境iOS(iPhone) SDK 4.0

Window-based Applicationプロジェクトを作成して、initWithNibName:bundle:を使ってUIViewControllerを追加して表示しようとすると、 以下のようにInterface Builderの表示とiPhone Simulatorの表示がStatusBarの分ずれることがあります。

Interface Builder iPhone Simulator
Interface Builder iPhone Simulator

initWithNibName:bundle:を使った場合はViewの再配置をしてくれないためこうなります。
(「Resize View From NIBの意味」に分かりやすく書いてあります)

以下のように、UIViewControllerのview.frameを変更することにより、 Interface Builderの表示と合わせることができます。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // ViewControllerはUIViewControllerのSubclass、contorllerは(ViewController *)型のインスタンス変数
  controller = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
  controller.view.frame = [UIScreen mainScreen].applicationFrame;
  [window addSubview:controller.view];
  [window makeKeyAndVisible];
  return YES;
}
Interface Builder iPhone Simulator
Interface Builder iPhone Simulator

なお、UINavigationControllerを使っているときは、UINavigationControllerが勝手にViewを再配置してくれるようですので、この問題は発生しません。

投稿者 MASATO : 2010年12月04日 02:39 | トラックバック
コメント
コメントする









名前、アドレスを登録しますか?