5

Il comportamento tipico di NavController è quello di ridimensionare quando in porto/paesaggio. Da 44px altezza a 32px credo (dalla cima della mia testa).Ridimensionamento automatico di UINavigationBar in rotazione su orizzontale

Sto utilizzando uno storyboard e ho incluso una barra di navigazione in un VC, non in un controller. Quando si ruota tra verticale e orizzontale, la barra di navigazione non viene ridimensionata automaticamente.

ho visto questa risposta, ma questo non aiuta: Resizing UINavigationBar on rotation

La barra di navigazione è controllore tramite aspetto che viene caricato in App Delegato:

UIImage *portraitImage = [UIImage imageNamed:@"mainNavBar"]; 
UIImage *landscapeImage = [UIImage imageNamed:@"mainNavBarLandscape"]; 
[[UINavigationBar appearance] setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundImage:landscapeImage forBarMetrics:UIBarMetricsLandscapePhone]; 

[[UINavigationBar appearance] setBackgroundColor:[UIColor blackColor]]; 
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: 
                 [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor, 
                 [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5],UITextAttributeTextShadowColor, 
                 [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], 
                 UITextAttributeTextShadowOffset,nil]]; 

[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin]; 

Purtroppo l'ultima parte non fa differenza e poiché la barra di navigazione sarà inclusa in più controller, non voglio ripetere lo stesso codice di colla nella domanda sopra la risposta a tutti i miei VC per ridimensionarli a rotazione.

risposta

3
[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin]; 

Ma non hai detto altezza flessibile. Eppure l'altezza, a quanto ho capito, è la caratteristica che si desidera essere flessibili.

+0

Corretto, l'ho notato anche poco dopo la pubblicazione. Grazie – StuartM

0

La risposta accettata ha funzionato per me, ma volevo passare al layout basato su vincoli completi.

Impostare il numero sul delegato posizionare le cose secondo necessità. Ricorda di allegare il delegato in IB (ovviamente).

// In my view controller 

#pragma mark - UIBarPositioningDelegate 
- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { 
    return UIBarPositionTopAttached; 
} 

Per i vincoli sulla UINavBar in IB:

  • Top Spazio a: Top Guida layout (0)
  • Leading Spazio a: Superview (0)
  • Formazione Spazio a: Superview (0)
  • soprattutto ... nessun vincolo di altezza di alcun tipo! -

L'altezza sarà determinata dalla dimensione del contenuto in fase di esecuzione. Inizialmente non potevo ottenere questo lavoro correttamente perché avevo il Vertical Content Hugging Priority a 750, ma era sbagliato. Quando ho cambiato di nuovo al valore predefinito (250) ha funzionato bene.

+0

Quanto sopra non sembra mai regolare la dimensione della barra degli strumenti. Credo che dovrebbe essere alto 32 pt in orizzontale su dispositivi ≤4 pollici. Questa tecnica sembra avere solo cura di regolare la posizione della barra degli strumenti per la presenza o l'assenza di una barra di stato. –

5

Se si utilizza layout automatico, s' intrinsicContentSize aggiornamenti correttamente rotazione UINavigationBar ma la sua altezza NSContentSizeLayoutConstraint non lo fa. Chiamando il numero invalidateIntrinsicContentSize si dice manualmente all'autolayout di aggiornare il vincolo di altezza per la barra di navigazione.

// View controller 
public override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) 
{ 
    super.viewWillTransition(to: size, with: coordinator); 

    self.navigationBar?.invalidateIntrinsicContentSize(); 
} 
Problemi correlati