视图显示在导航栏下方20个像素

时间:2012-07-08 00:26:24

标签: iphone ios

当我在AppDelegate中以编程方式创建一个UINavigationController时,以root为嵌入式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个像素)。

有没有人遇到类似的问题和/或有什么我做错了吗?

1 个答案:

答案 0 :(得分: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;

如果您想查看它,here是Apple相关文档。