La barre noire entre la barre de navigation et la vue de table apparaît sur iOS 6

Je semble avoir un problème depuis que j'ai commencé à utiliser iOS 6, qui n'apparaît pas lorsque j'utilise iOS 5. Au début, je pensais que ça pourrait être un bug de simulateur, mais depuis que je l'ai testé sur mon iPhone 5 aujourd'hui, je peux voir que ce n'est pas seulement dans le simulateur.

Je crée tout par programmation – je semble préférer le faire de cette façon (je suppose que c'est à cause de mon arrière-plan HTML / CSS!) – mais je suis encore relativement nouveau à Objective-C, et je n'ai pas trouvé un exemple complet de la façon de configurer un controller de navigation / vue de table par programme, donc je l'ai mis set à partir des pépites d'information que je pourrais find, et donc, je pourrais faire quelque chose de fondamentalement faux. Cependant, il a fonctionné (et fonctionne toujours) parfaitement sur iOS 5.

Le problème est que j'ai une barre noire entre la barre de navigation et la vue de table, mais la chose étrange est que si je pousse une vue et returnne à cette vue originale, la barre disparaît, et ne réapparaît pas jusqu'à ce que je redémarre complètement l'application.

L'image suivante est de l'application au lancement (1), comme je pousse une vue dans (2), et la vue initiale, après que je suis returnné à elle (3):

C'est ce que j'ai comme mon code:

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: %@", NSSsortingngFromCGRect(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: %@", NSSsortingngFromCGRect(self.tableView.frame)); UIBarButtonItem *newViewButton = [[UIBarButtonItem alloc] initWithTitle:@"New View" style:UIBarButtonItemStylePlain target:self action:@selector(newViewButtonTapped:)]; [self.navigationItem setRightBarButtonItem:newViewButton animated:NO]; } 

J'ai ajouté les NSLogs pour voir s'ils montraient quelque chose qui pourrait m'aider. La sortie est:

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

Quelqu'un peut-il me donner des idées sur ce que je fais mal? Il semble avoir un semblable / le même problème ( barre de navigation barre noire Overertop – dans les commentaires), mais je n'ai pas trouvé de réponse.

Merci d'avance!

Vous ajoutez le RootViewController à la window deux fois, une fois en définissant UIWindow.rootViewController (qui en interne fait [window addSubview:rootViewController.view] ) et à nouveau en l'ajoutant comme une sous-vue du controller de navigation.

Vous devriez faire ceci:

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

En règle générale, ne jamais append une vue directement à la window, sauf si vous savez que vous voulez réellement.