2013-08-29 11 views
14

Siete incappati in questo problema?Il controller di navigazione viene visualizzato tramite la vista che ho navigato fino a

Sostanzialmente in iOS 7, il Navigation Controller viene visualizzato sulla sottoview a cui ho navigato.

Nella vista di iOS 6 I navigazione è racchiusa tra la barra di navigazione e il piè di pagina. In iOS 7 sembra che la sotto-vista sia resa a schermo intero, sotto la barra di navigazione e il piè di pagina. Come risultato l'utente non lo vede.

Ecco come ci si dirige verso visualizzazione secondaria

BRSMyListSubViewController *tagsInfoVC = [[BRSMyListSubViewController alloc] initWithCheckinsList:self.checkinsList 
                       selectedTag:[self tagByIndexPath:indexPath]]; 

[self.navigationController pushViewController:tagsInfoVC animated:YES]; 

Ecco come ho inizializzare in viewDidLoad

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:UIBarButtonItemStyleBordered target:self action:@selector(settings:)]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Logout" style:UIBarButtonItemStyleBordered target:self action:@selector(logout:)]; 

Per quel che vale Vorrei anche ricordare che la visualizzazione secondaria è definita in XIB utilizzando autolayout. Qui è la mia fonte di XIB: http://pastebin.com/6RR0zYu4

Ed infine ecco come appare in iOS 6

enter image description here

E in iOS 7

enter image description here

Qualche idea?

risposta

37

Beh, l'ho capito.

Nel vostro sub-view (BRSMyListSubViewController nel mio caso), in viewDidLoad, è necessario impostare una di queste due

self.edgesForExtendedLayout = UIRectEdgeNone; 
self.automaticallyAdjustsScrollViewInsets = NO; 

O

self.edgesForExtendedLayout = UIRectEdgeNone; 
self.extendedLayoutIncludesOpaqueBars = YES; 

È interessante notare che in vista della radice di controllo questi valori sono impostati su default UIRectEdgeAll, NO e YES rispettivamente, ma il suo tableView NON è sotto la barra di navigazione e il piè di pagina.

Non so perché sia ​​così illogico.

È anche strano che edgesForExtendedLayout debba essere combinato con una delle altre due proprietà, anche se è chiaramente responsabile del comportamento.

PS. Per chi vuole eseguirlo su iOS 6. Surruound il codice con if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)

+0

Grazie per la risposta, mi ha davvero aiutato. – titicaca

+0

Grazie mille per la tua risposta salva la mia giornata! –

+0

Funziona solo per iOS7 se si esegue l'applicazione in un dispositivo iOS6 funzionerà eccezionalmente come le proprietà SDK di iOS7 –

4

Se non ti dispiace avere una barra di navigazione opaca, la soluzione più semplice potrebbe essere quella di farlo nel controller di visualizzazione che crea il tuo controller di navigazione :

self.navigationController.navigationBar.translucent = NO; 

Il posizionamento del telaio adotterà quindi lo stesso comportamento di iOS6, magicamente!

Problemi correlati