2013-08-16 13 views
33

Sto eseguendo la stessa app in iOS6 e iOS7 con NavigationBar. Funziona bene su iOS6, ma in iOS7, tutte le viste sono un po 'in su come se non si considerasse affatto la barra di navigazione.ios 7 Problema del telaio UiView

Ho provato a modificare la proprietà di topbar nell'opzione di metriche simulate ma non funziona. Considera la posizione del pulsante da NavigationBar in iOS6, ma in iOS7, lo considera dalla parte superiore dello schermo.

Qual è il motivo?

Grazie in anticipo.

iOS 6 Screenshot

iOS 7 Screenshot

risposta

53

Si dovrebbe usare sotto la linea per la correzione nel vostro punto di vista.

self.edgesForExtendedLayout = UIRectEdgeNone; 
+0

sì è funzionante bene per me. ma la mia app ha Tabbacontroller alos. Il resto del viewcontroller funziona bene. Problema nel controller della vista Tabbar. supponiamo di avere 5 schede. 1. quando clicco sulla scheda (schermata Elenco aperta) funziona bene quando faccio clic sul dettaglio dell'elenco apri bene. fino a quando funziona bene 2. quando clicco sulla scheda 2 (un'altra lista) aperta. quella volta in cui clicco sulla scheda 1 rispetto alla schermata principale, la vista principale dello schermo diminuisce a 64px. ho provato ad aumentare con forza ma non funziona .. cosa posso fare in questo caso ?? – Hitarth

+2

Penso che sia meglio controllare prima di impostare questa proprietà: '[self respondsToSelector: @selector (edgesForExtendedLayout)]' – jianpx

5

Al momento di questa risposta, iOS 7 era ancora sotto NDA, quindi non era possibile scrivere la soluzione reale. Per aiutare comunque, ho pubblicato un link di aiuto disponibile solo per gli sviluppatori registrati.

==== originale del messaggio: ====

Leggi l'iOS 7 Transition Guide. La sua sezione "Aggiornamento dell'interfaccia utente" spiega come risolvere il problema.

+0

RTFM = voto negativo! – TheRonin

+2

Al momento del mio post iOS 7 era ancora sotto NDA, quindi l'unica possibilità di aiutare era quella di puntare alla guida ufficiale a cui solo gli sviluppatori registrati hanno accesso. – Tafkadasoh

+1

@Tafkadasoh Capisco il tuo dilemma e apprezzo il tuo sforzo di aiutare a prescindere dalla NDA. Vorrei (rispettosamente) suggerire che sarebbe stato meglio se avessi menzionato la NDA nella tua risposta originale e poi dettagliato esattamente dove trovare la risposta alla domanda, cioè: "Questo è ancora sotto NDA, tuttavia, è documentato a pagina NNN della guida alla transizione di iOS7 ... ". In questo modo, avresti creato una risposta più direttamente utile e non ti sei aperto fino al voto negativo. –

14

In "iOS 7 UI Transition Guide" per Layout e Aspetto è anche menzionato - in iOS7 in, i controller di visualizzazione utilizzano il layout a schermo intero.

Se si desidera che la vista mostri la seguente posizione dalla barra di navigazione, è possibile modificare i bordi di UIViewControllerForExtendedLayout per ottenere questa proprietà.

edgesForExtendedLayout è un attributo UIExtendedEdge di tipo che specifica la direzione del bordo da estendere.

Poiché iOS7 incoraggia il layout a schermo intero, il suo valore predefinito è naturale per essere UIRectEdgeAll, entrambi estesi attorno al bordo, cioè, se c'è anche la barra di navigazione della vista, sotto tabBar, la vista estenderà la copertura all'area circostante .

Se si effettua la seguente visualizzazione delle impostazioni, la vista non verrà estesa a quelle dietro la barra, quindi l'etichetta è uscita. View Source Stampa

self . edgesForExtendedLayout = UIRectEdgeNone ; 
+1

L'uso di "edgesForExtendedLayout" non mi sta facendo il trucco. Lo sto aggiungendo nel metodo viewDidLoad. Qualsiasi aiuto sarebbe apprezzabile. – Priyanka

+0

Ho implementato nell'app 4-5, funziona. Puoi descrivere il tuo scenario? – PK86

+0

Lo confermo anch'io. Funziona, devi metterlo in ogni finestra –

8

In iOS 7, vista controllori utilizzano il layout a schermo intero. è menzionato in iOS 7 UI Transizione Guida

se si desidera modificare il layout utilizzare edgesForExtendedLayout proprietà

esempio:

if([UIViewController instancesRespondToSelector:@selector(edgesForExtendedLayout)]) 

     self.edgesForExtendedLayout=UIRectEdgeNone; 
+1

sì è funzionante bene per me. ma la mia app ha Tabbacontroller alos. Il resto del viewcontroller funziona bene. Problema nel controller della vista Tabbar. supponiamo di avere 5 schede. 1. quando clicco sulla scheda (schermata Elenco aperta) funziona bene quando faccio clic sul dettaglio dell'elenco apri bene. fino a quando funziona bene 2. quando clicco sulla scheda 2 (un'altra lista) aperta. quella volta in cui clicco sulla scheda 1 rispetto alla schermata principale, la vista principale dello schermo diminuisce a 64px. ho provato ad aumentare con forza ma non funziona .. cosa posso fare in questo caso ?? – Hitarth

3
if([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
    [self setEdgesForExtendedLayout:UIRectEdgeBottom]; 
5

ho avuto un problema simile me stesso e ha scoperto che se si spegne la traslucenza della barra di navigazione il punto di vista si discesa lo stesso come hanno fatto in iOS6.

self.navigationController.navigationBar.translucent = NO; 
+0

questo è stato fantastico! mi ha risparmiato ore di lavoro. Grazie. –