当我在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个像素)。
有没有人遇到类似的问题和/或有什么我做错了吗?
答案 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相关文档。