2009-06-24 21 views
13

Sto avendo uno strano problema con l'aggiunta di un UINavigationController alla mia applicazione iPhone. Aggiungo il controller come segue:iPhone: spazio strano nella parte superiore di UINavigationController

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 che ottengo uno spazio bianco strano nella parte superiore del mio punto di vista tra la barra di stato e la barra del titolo 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 la direzione di qualche aiuto?

Grazie in anticipo.

risposta

0

Forse hai in qualche modo ottenuto due UIViews, ciascuno con una barra di stato. Controlla lo xib.

11

Che cosa significa la linea di

UIView *finalView = myeNavigationViewController.view; 

aggiungere al codice? E 'ridondante, come si può aggiungere la vista direttamente senza assegnarlo a un UIView prima - più è errato in quanto fa riferimento alla myNavigationController e non navigationController ..
tendo a fare questo

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]]; 

Impostazione del telaio per i limiti rimuove anche lo spazio bianco in alto che stavi chiedendo.

2

Il problema è che UINavigationController ideale dovrebbe essere la visualizzazione secondaria diretta di UIWindow. Si posizionerà e ridimensionerà da solo. Quando aggiungi UINavigationController in un'altra vista personalizzata di una sottoview UIWindow, devi occuparti della posizione e della dimensione di questa vista personalizzata tenendo conto se la barra di stato è visualizzata o meno nella UIWindow.

Il mio suggerimento è quello di rendere la visualizzazione personalizzata come una sottoclasse di UINavigationController:

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

[myUIWindow addSubview:nav.view]; 

e dentro la mySubClass_NavigationController, si può fare tutte le personalizzazioni che si sta facendo ora nella vostra auto (qualunque cosa questo controller è) .

2

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

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

Questo è il codice che ho trovato 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]]; 

C'è qualche informazione in più su http://discussions.apple.com/message.jspa?messageID=7890362.

1

Esiste una proprietà oscura in IB denominata "Barra in basso sulla spinta". Basta controllare. Ha risolto il problema per me.

Problemi correlati