2013-10-23 38 views
7

La solita storia: sto eseguendo un'app iOS 5/6 eseguita su iOS 7 e il cambio di comportamento della barra di navigazione sta causando un problema.Nascondere la barra di navigazione sposta la vista "su"

L'app funzionava già come l'impostazione predefinita di iOS 7 con una visualizzazione a schermo intero e una barra di spostamento traslucida "sopra" della vista. Il problema è che nascondere/nascondere la barra di navigazione causa un comportamento diverso in iOS 7. Su iOS 5/6 nascondere/nascondere la barra di navigazione non cambia la visualizzazione. Su iOS 7, nascondendo la barra visivamente si sposta la vista verso l'alto lasciando una barra vuota nella parte inferiore dello schermo e disancorando la barra si sposta indietro la vista verso il basso per occupare l'intero schermo (con la barra di navigazione in alto, ovviamente).

Devo continuare a supportare iOS 5, quindi non utilizzo il layout automatico, ma utilizzo lo schermo intero. Ho una vista in cui sto visualizzando un'immagine zoomabile, quindi il controller di visualizzazione ha una vista a schermo intero contenente una scrollView che contiene un'immagineView.

La barra di stato è sempre nascosta.

Ottengo il controller di visualizzazione tramite un controller di navigazione, quindi c'è una barra di navigazione (nera, traslucida) che si trova sulla parte superiore della mia visualizzazione a schermo intero/scrollView/imageView.

Dopo un breve ritardo alcune etichette sovrapposte si attenuano e la barra di navigazione è nascosta Un singolo tocco ripristina le etichette sovrapposte e svita la barra di navigazione. Funziona su iOS 5/6: la barra di navigazione scivola fuori dalla parte superiore dello schermo per scoprire la parte superiore della vista/dell'immagine.

Su iOS 7, quando la barra di navigazione scivola fuori dalla parte superiore dello schermo, l'intera vista si sposta visivamente su una quantità corrispondente (ovvero 44 punti) lasciando una barra nera nella parte inferiore dello schermo. Riesco a vedere questo impostando un colore di sfondo nella vista di livello superiore e ridimensionando la finestra di scorrimento abbastanza per vedere lo sfondo; la parte superiore della vista si sposta effettivamente fuori campo e il colore di sfondo non viene disegnato sul fondo (44 punti) dello schermo.

MA, self.view.frame non cambia e rimane a {0, 0} 320 x altezza.

Quando tocco singolo per ripristinare le informazioni di sovrapposizione e la barra di navigazione, la vista si sposta verso il basso per occupare lo schermo intero e la barra di spostamento traslucida si trova sopra la parte superiore della vista/dell'immagine.

Niente Ho provato modifica il comportamento: Modificare i controlli di layout View Controller IB (sotto piano bar, Under barre inferiori, Regolare vista di scorrimento inserti). Costruire per 5.1, 6.1 e 7.0 produce tutti lo stesso risultato se eseguito sotto 7.0.

self.edgesForExtendedLayout = UIRectEdgeNone 

non fa nulla. L'utilizzo dei valori delta del layout non fa nulla. In IB la vista è la stessa quando "visto come" iOS 7 e iOS 6 e precedenti. Stampo molte informazioni di debug ma nulla riguardo la vista (o la vista di scorrimento) sembra cambiare quando la vista si sposta "fuori dallo schermo".

Il codice che mostra la sovrapposizione informazioni (eseguito quando la visualizzazione viene dapprima mostrato e sui singoli-rubinetti) è:

- (void) showOverlayInfo { 
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack; 
    [[[self navigationController] navigationBar] setTranslucent:YES]; 
    [[self navigationController] setNavigationBarHidden:NO animated:NO];  

    overlayInfoHidden = NO; 
    overlayInfoFading = NO; 
    self.infoButton.hidden = NO; 
    self.infoButton.alpha = 1; 
    self.descriptionLabel.hidden = NO; 
    self.descriptionLabel.alpha = 1; 
} 

Il codice che nasconde la sovrapposizione informazioni è:

- (void) hideOverlayInfo { 
    overlayInfoHidden = YES; 
    overlayInfoFading = NO; 
    self.infoButton.hidden = YES; 
    self.descriptionLabel.hidden = YES; 
    [[self navigationController] setNavigationBarHidden:YES animated:YES]; 
} 

Quindi qualcuno può dirmi cosa (presumibilmente semplice) cosa mi manca?

risposta

10

Ho finalmente trovato il mio problema.

Il fatto chiave è che il controller di visualizzazione del visualizzatore di immagini era in un UIPageViewController, , quindi quello che stavo guardando e sperimentando era davvero "dentro" un altro controller di visualizzazione. Anche se avevo disabilitato l'impostazione del controller di visualizzazione Regola visualizzazione vista Inserti per il visualizzatore immagini VC, non l'avevo fatto per il contenitore VC che creava UIPageViewController e UIPageViewController presenta le pagine in alcune sottoclassi di UIScrollView. Quando li ho modificati per il genitore VC, il problema è svanito.

Quindi penso che la morale della storia è:

  • pensare al problema più globalmente quando locale non funziona perché forse vi state perdendo un po 'di contesto importante.
  • Se non si desidera utilizzare il comportamento di iOS 7, modificare le impostazioni per ogni singolo controller di visualizzazione che si possiede!
Problemi correlati