2013-09-04 18 views
18

Attualmente sto transitando la mia applicazione su iOS 7 (voglio che rimanga compatibile con iOS 6). Questa domanda non è coperta dalla NDA di Apple, è una domanda su Auto Layout (sembra che iOS 7 imponga il layout automatico (EDIT: è sbagliato, non è forzato)).Layout automatico con barra di navigazione e controller di visualizzazione (iOS 7)

Ho un controller di navigazione con un controller di visualizzazione radice (ovvio). Con iOS 6, non stavo usando il layout automatico, quindi i controller della vista radice erano sotto la barra di navigazione. Con iOS 7, l'origine del frame non include la barra di navigazione, quindi la parte superiore del mio contenuto è nascosta ...

Hai un'idea di come rendere l'intera vista sopra la barra di navigazione con Auto Layout?

Grazie!

+0

Posso sbagliarmi, ma sarei sorpreso se Apple "forzato "Gli sviluppatori di utilizzare il layout automatico in iOS7? Questo è sicuramente il caso? (questa informazione può essere coperta dalla NDA!) – bennythemink

+0

L'autocostruzione non è forzata in iOS 7. È migliorata. –

+0

È forzato. non hanno menzionato nel doc. Controllare i valori dei frame prima di viewDidLoad e viewDidAppear. Non uso IB ma i valori sono diversi .. Cosa suggerisce questo ?? !! –

risposta

22

Su iOS 7 è disponibile la topLayoutGuide che specifica la barra di navigazione. È quindi possibile specificare che si desidera che il vincolo di tableview sia nella topLayoutGuide e non nella superview.

Questo vi aiuterà a conoscere se è iOS7 o no:

if ([self respondsToSelector:@selector(topLayoutGuide)]) 

modo che possa essere qualcosa di simile

NSString *verticalConstraint = @"V:|[v]|"; 
NSMutableDictionary *views = [NSMutableDictionary new]; 
views[@"v"] = self.tableview; 
if ([self respondsToSelector:@selector(topLayoutGuide)]) { 
    views[@"topLayoutGuide"] = self.topLayoutGuide; 
    verticalConstraint = @"V:[topLayoutGuide][v]|"; 
} 
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:verticalConstraint options:0 metrics:nil views:views]]; 
[self.view addConstraints:constraints]; 
+1

per compilare su ios 6, self.topLayoutGuide deve essere [self valueForKey: @ "topLayoutGuide"] (testato su iOS 7 GM) –

+0

@kschaeffler ti dispiacerebbe spiegare la sintassi dietro @ "V: [topLayoutGuide] [v] | "? Sto esaminando l'articolo sui linguaggi del formato visivo, ma sono ancora un po 'confuso. Penso che stia dicendo che Vertical è correlato alla topLayoutGuide, ma ... Modifica: * Flash - la lampadina si spegne * Non importa, penso di aver capito. La V iniziale: dice che stai impostando un layout verticale, e quindi [object1] [object2] sta dicendo che gli oggetti 1 e 2 sono a filo - l'uno contro l'altro. Non sono sicuro di cosa sia il | lo fa. – RonLugge

+0

OK, dato che l'ho capito da solo, pubblicherò una breve spiegazione: la parte 'V:' modifica questo in modo che tu stia influenzando il layout verticale. La [topLayoutGuide] funge da riferimento per la guida di layout superiore fornita dalla vista, che viene posizionata a livello rispetto alla sottoview, rappresentata da [v]. Il tubo di chiusura significa che il bordo della vista è a filo con la fine del superview. Una volta capito, un linguaggio di layout molto chiaro e bello ... se difficile da capire all'inizio. – RonLugge

Problemi correlati