Ridimensionamento di UINavigationBar in rotazione
-
22-07-2019 - |
Domanda
Ho una sottoclasse di UIViewController che gestisce una UIView. Il viewcontroller è presentato in modo modale (scorre verso l'alto dalla parte inferiore dello schermo). Nella parte superiore della vista, ho aggiunto una barra di navigazione. Nota che questa barra non è gestita da un controller di navigazione.
Voglio far restringere la barra di navigazione in altezza quando la vista ruota in orizzontale (simile a come si comporta quando viene gestita da un UINavigationController). Tuttavia, non riesco a impostare la sua maschera di ridimensionamento automatico su altezza flessibile in IB, e farlo nel codice fa scomparire completamente la barra di navigazione.
C'è un modo per farlo? Come viene eseguito da UINavigationController?
P.S. Preferirei non dover ricorrere a una trasformazione di ridimensionamento, poiché ciò rovinerebbe il testo nel titolo.
EDIT: l'ho risolto con un piccolo aiuto, leggi la risposta postata di seguito.
Soluzione 2
Ho trovato la soluzione, e col senno di poi mi sento piuttosto stupido. Ho dovuto solo includere un margine inferiore flessibile nella maschera di ridimensionamento automatico della barra di navigazione. Il merito è dovuto all'utente RayNewbie in questo thread, che mi ha indicato la soluzione:
Altri suggerimenti
Invece di impostare la maschera di ridimensionamento automatico, perché non controllare semplicemente l'orientamento corrente in viewWillAppear, così come in didRotateFromInterfaceOrientation e impostare il frame appropriato?
- (void) updateNavBar {
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if ((UIInterfaceOrientationLandscapeLeft == orientation) ||
(UIInterfaceOrientationLandscapeRight == orientation)) {
myNavBar.frame = CGRectMake(0, 0, 480, 34);
} else {
myNavBar.frame = CGRectMake(0, 0, 320, 44);
}
}
- (void) viewWillAppear {
[self updateNavBar];
// ... SNIP ...
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self updateNavBar];
// ... SNIP ...
}