导航栏和表格视图之间的黑条出现在iOS 6上

自从我开始使用iOS 6之后,我似乎遇到了一个问题,在使用iOS 5时没有出现这个问题。起初,我认为这可能只是一个模拟器错误,但是从今天在iPhone 5上testing之后,我可以看到它不只是在模拟器中。

我以编程方式创build所有东西 – 我似乎更喜欢这样做(我认为这是因为我的HTML / CSS背景!) – 但是我还是比较新的Objective-C,我找不到完整的示例如何以编程方式设置导航控制器/表视图,所以我把它从我能find的信息的金块放在一起,因此,我可能会做一些根本性的错误。 但是,它在iOS 5上工作(并仍然有效)。

问题是我在导航栏和表格视图之间有一个黑条,但奇怪的是,如果我推视图并返回到原始视图,栏会消失,直到我完全重新启动才会重新出现该应用程序。

下面的图片是在启动(1)时的应用程序,我正在推动(2)中的一个视图,以及在我回到它之后的初始视图(3):

这就是我的代码:

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; RootViewController *rootController = [[RootViewController alloc] init]; self.window.rootViewController = rootController; self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootController]; [self.window addSubview:navigationController.view]; [self.window makeKeyAndVisible]; NSLog(@"Window frame: %@", NSStringFromCGRect(self.window.frame)); return YES; } 

RootViewController.m

 - (void)loadView { self.title = @"Title"; self.tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStylePlain]; self.tableView.delegate = self; self.tableView.dataSource = self; self.view = self.tableView; NSLog(@"tableView frame: %@", NSStringFromCGRect(self.tableView.frame)); UIBarButtonItem *newViewButton = [[UIBarButtonItem alloc] initWithTitle:@"New View" style:UIBarButtonItemStylePlain target:self action:@selector(newViewButtonTapped:)]; [self.navigationItem setRightBarButtonItem:newViewButton animated:NO]; } 

我添加了NSLogs,看他们是否显示了任何可能帮助我的东西。 输出是:

 tableView frame: {{0, 0}, {320, 480}} Window frame: {{0, 0}, {320, 480}} 

任何人都可以给我任何想法,我做错了什么? 似乎有一个类似/相同的问题( 黑条超过导航栏 – 在评论中),但我还没有find答案。

提前致谢!

一次通过设置UIWindow.rootViewController(内部执行[window addSubview:rootViewController.view] )并再次将其添加为导航控制器的子视图,将RootViewController添加到窗口两次。

你应该这样做:

 RootViewController *rootController = [[RootViewController alloc] init]; self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootController]; self.window.rootViewController = navigationController; 

作为一个经验法则,除非你知道你真的想要,否则不要直接向窗口添加视图。