0

プログラムで AppDelegate 内に UINavigationController を作成し、たとえば標準の UIViewController で構成される 2 つの単純なタブを持つ組み込みの UITabBarController をルートとして持つと、UIViewController のビューがナビゲーション バーから 20 ピクセル下にずれているように見えます。ナビゲーション バーの下部とビューの上部の間の 20 ピクセルのギャップ。

このコードは、AppDelegate didFinishLaunchingWithOptions 関数に次のコードのみを含む単純な空のアプリケーションです。

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UIViewController* vc1 = [[UIViewController alloc] init];
vc1.view.backgroundColor = [UIColor blueColor];

UIViewController* vc2 = [[UIViewController alloc] init];
vc2.view.backgroundColor = [UIColor redColor];

UITabBarController* tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, nil]
    animated:YES];

UINavigationController* navigationController = [[UINavigationController alloc]
    initWithRootViewController:tabBarController];

self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;

問題はステータスバーの高さに関連しているようですが、何が間違っているのかわかりません。ただし、問題はシミュレーターには表示されず、デバイスで実行している場合にのみ表示されるようです。また、2 番目のタブを選択すると、ビューが通常の位置に戻ったように見えます (ナビゲーション バーからの 20 ピクセルのオフセットなし)。

誰かが同様の問題を経験したことがありますか、そして/または私が間違っていることがありますか?

4

1 に答える 1

0

一般的な推奨事項として、(何としてでも) tabBarController を NavBarController にプッシュしないようにしてください。Apple では推奨していません。「正しい」方法は、すべての ViewController に対して NavBarController を作成し、次にコードに基づいて、NavController を TabController の項目として設定することです。

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UIViewController* vc1 = [[UIViewController alloc] init];
vc1.view.backgroundColor = [UIColor blueColor];
UINavigationController *vc1Nav = [[UINavigationController alloc]
initWithRootViewController:vc1];

UIViewController* vc2 = [[UIViewController alloc] init];
vc2.view.backgroundColor = [UIColor redColor];
UINavigationController *vc2Nav = [[UINavigationController alloc]
initWithRootViewController:vc2];

UITabBarController* tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:vc1Nav, vc2Nav, nil]
animated:YES];

self.window.rootViewController = tabBarController;
[self.window makeKeyAndVisible];
return YES;

いずれにせよ、確認したい場合は、ここにApple関連のドキュメントがあります。

于 2012-07-08T04:41:13.200 に答える