TL; DR: Sembra che la gerarchia della vista non è regolato per le dimensioni iPad Pro schermo fino viewWillLayoutSubviews:
e viewDidLayoutSubviews:
viene richiamato. Quando questo viene invocato dal sistema di layout dipende dalla costruzione della gerarchia della vista.
Nell'aggiornamento della mia app per iPad Pro sto anche osservando un comportamento simile. Pertanto ho dato uno sguardo più approfondito agli eventi del ciclo di vita del controller di visualizzazione per vedere cosa stava accadendo sia nel mio progetto esistente che in un nuovo progetto.
Per un progetto nuovo di zecca, utilizzando un controller di visualizzazione che ha solo una barra di navigazione (posizionata appena sotto la barra di stato) e una vista primaria (che occupa il resto dello spazio, con il layout automatico attivato, in modalità orizzontale alla seguente schermata:
![Sample view controller with navigation bar and auto-layout](https://i.stack.imgur.com/4KTkU.png)
sto vedendo il seguente output dalla console per il ciclo di vita vista del regolatore:
-[ViewController viewDidLoad] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewDidLoad] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewWillAppear:] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewWillAppear:] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewWillLayoutSubviews] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[ViewController viewDidLayoutSubviews] self.primaryView: .frame: {{0, 64}, {1366, 960}}; .bounds: {{0, 0}, {1366, 960}}
-[ViewController viewDidAppear:] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[ViewController viewDidAppear:] self.primaryView: .frame: {{0, 64}, {1366, 960}}; .bounds: {{0, 0}, {1366, 960}}
da quello che posso vedere qui, la vista inizia con un wi dth di 1024 punti ma una volta 'viewDidLayoutSubviews' viene eseguita, la dimensione appropriata è stata determinata (1366 punti).
Nel mio progetto per una schermata che utilizza un controller split-view, posso vedere un comportamento simile:
-[XYZViewController viewDidLoad] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillAppear:] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidAppear:] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
In questo caso, dal momento che la gerarchia vista è diverso, viewWillLayoutSubviews:
viene chiamato in precedenza nel visualizzare il ciclo di vita del controller e la dimensione corretta è già stata determinata dal momento in cui viene invocato il numero viewWillAppear:
. Ma come puoi vedere, questo dipende molto dalla tua gerarchia di vista - quindi ti consiglio di confermare la gerarchia delle tue viste e quindi di determinare la posizione migliore per aggiungere il tuo codice dipendente dalla risoluzione.
Ci sono novità riguardo questo problema? Sto avendo lo stesso problema. Non importa quello che faccio, ottengo costantemente 1024 * 768 nel simulatore di iPad Pro. –
@GergelyKovacs per ora non ho idea di come farlo funzionare. La prossima settimana tornerò su questo argomento. Descriverò i risultati se troverò un po 'di interessante. –
@AlexanderBalabanov: puoi fornire ulteriori informazioni sul problema che stai riscontrando, in modo che possiamo aiutarti? Sto anche risolvendo il problema con il supporto di iPad Pro e vorrei essere sicuro che tutti noi possiamo supportarlo in modo appropriato. Dove stai eseguendo la tua dichiarazione NSLog per vedere i limiti della vista? Stai usando Auto-Layout? Se puoi fornirci qualche altro contesto di ciò che stai vivendo, speriamo che tutti possiamo lavorare insieme per aiutare a risolvere questo problema. –