iPhone: strano spazio nella parte superiore di UINavigationController
-
22-07-2019 - |
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.
Soluzione
Controlla le risposte a questa domanda:
Non sono sicuro del motivo per cui UIView viene spostato di circa 10px
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.