0

当我在 AppDelegate 中以编程方式创建一个 UINavigationController 时,作为根有一个嵌入式 UITabBarController,例如两个由标准 UIViewControllers 组成的简单选项卡,UIViewControllers 的视图似乎从导航栏向下移动了 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;

问题似乎与状态栏的高度有关,但是我不明白我做错了什么。但是,该问题并未出现在模拟器中,并且似乎仅在设备上运行时出现。此外,当您选择第二个选项卡时,视图似乎会移回其正常位置(与导航栏没有 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 回答