Domanda

Ho uno strano problema con l'aggiunta di un UINavigationController alla mia applicazione per iPhone. Aggiungo il controller come segue:

myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];

myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];

UIView *finalView = myeNavigationViewController.view;

[self.view addSubview:finalView];

Tutto sembra funzionare come previsto, tranne per il fatto che ottengo uno strano spazio bianco nella parte superiore della mia vista tra la barra di stato e la barra del titolo di UINavigationController. alt text http://www.andrewskinner.name/problem.png

Ho cercato online ma non so davvero cosa cercare. Qualcun altro ha avuto questo problema? Puoi indicarmi un aiuto?

Grazie in anticipo.

È stato utile?

Soluzione

Altri suggerimenti

Cosa significa la linea

UIView *finalView = myeNavigationViewController.view;

aggiungi al codice? È ridondante in quanto è possibile aggiungere la vista direttamente senza assegnarla prima a una UIView, inoltre non è corretta in quanto fa riferimento a myNavigationController e non navigationController ..
Tendo a farlo

myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];    
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
[navigationController.view setFrame: [self.view bounds]];
navigationController.delegate = self;
[self.view addSubview:[navigationController view]];

L'impostazione della cornice sui limiti rimuove anche lo spazio bianco nella parte superiore di cui ti stavi chiedendo.

Il problema è che UINavigationController dovrebbe idealmente essere il subView diretto di UIWindow. Si posizionerà e dimensionerà da solo. Quando aggiungi UINavigationController in un'altra vista personalizzata di una sottoview UIWindow, devi occuparti della posizione e delle dimensioni di questa vista personalizzata prendendo in considerazione se la barra di stato è mostrata o meno nella UIWindow.

Il mio suggerimento è di rendere la vista personalizzata come sottoclasse di UINavigationController:

mySubClass_NavigationController*nav=[[mySubClass_NavigationController alloc] initWithRootViewController:viewController ];

[myUIWindow addSubview:nav.view];

e all'interno di mySubClass_NavigationController, puoi fare tutta la personalizzazione che stai facendo ora da solo (qualunque sia quel controller).

Ho lottato con questo per un po 'anche usando un codice molto simile a quello operativo e avevo anche una barra bianca sopra il mio controller di navigazione.

Il mio problema si è verificato durante l'aggiunta di UINavigationController come vista in un UITabController. Lo spazio nel mio caso è stato causato dalla parte UINavigationBar di UINavigationController tenendo conto della barra di stato e si stava effettivamente sovrapponendo alla vista che stavo cercando di mostrare in UINavigationController.

Questo è il codice con cui sono finito in loadView in uno dei miei controller di visualizzazione UITabBarController.

SomeUITableViewController *screenList = [[SomeUITableViewController alloc] init];

UINavigationController *navController = [[UINavigationController alloc]
                                         initWithRootViewController:screenList];

CGRect frame = [[navController navigationBar] frame];

frame.origin.y = 0; // Was 20, set to 0 to not take into account the status bar.

[[navController navigationBar] setFrame:frame];

[self setView:[navController view]];

Ulteriori informazioni sono disponibili all'indirizzo http://discussions.apple.com/message.jspa ? messageId = 7890362 .

Esiste una proprietà oscura in IB chiamata " Hides Bottom Bar on Push " ;. Basta controllare. Mi ha risolto il problema.

Forse ti sei in qualche modo ottenuto due UIVview, ognuno con una barra di stato. Controlla lo xib.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top