just.dont.do.it (フレームを設定しない) !!!
最もシンプルでクリーンなテクニックは次のとおりです。
YourAppDelegate.h:
@property(nonatomic,retain) UITabBarController * tabBarController;
YourAppDelegate.m:
@synthesize tabBarController;
#pragma mark -
#pragma mark Application lifecycle
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
UINavigationController *viewController1 = [[[UINavigationController alloc] initWithRootViewController:[[[UIViewController alloc] init] autorelease]] autorelease];
UINavigationController *viewController2 = [[[UINavigationController alloc] initWithRootViewController:[[[UIViewController alloc] init] autorelease]] autorelease];
self.tabBarController.viewControllers = @[viewController1, viewController2];
self.tabBarController.customizableViewControllers = nil;
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
そして、すべてがうまくいくでしょう。フレーム、回転、自動サイズ変更、iPhone、iPad など。
ところで、Xcode で「Tab Bar application」テンプレートを使用して新しいプロジェクトを作成し、Apple がどのようにそれを行うかを確認できます。
および..(将来的に役立つアドバイス)UITabBarControllerは、正しい回転などのためにビュー階層の最上位(UIWindow上)にある必要があります。私のサンプルコードにはそれが含まれています(将来的に時間を節約できます)