2014-11-13 14 views
6

ho iniziato un nuovo progetto di un'unica vista su Xcode 6.1
andato al mio obiettivo e impostare dispositivo famiglia Universal e bersaglio distribuzione a 7,1IOS 7.1, regolari vincoli di larghezza su storyboard universale ignorata se famiglia di dispositivi di destinazione impostata su iPad

nel storyboard ho messo un'etichetta rossa in classe Size Regular Width | Any Height e un'etichetta blu in dimensione delle classi Compact Width | Any Height

Secondo la documentazione dovrei vedere un'etichetta rossa quando viene eseguito su ipad e blu su iphone, Finora questo funziona come previsto sia sul simulatore che sui dispositivi reali.

Ora sono tornato al bersaglio e impostare dispositivo della famiglia di IPad, eseguire nuovamente l'applicazione:

  1. IPad 2 (7.1) sul simulatore - etichetta rossa

  2. IPad 2 (7.1) (dispositivo reale) - etichetta blu?!?!?

  3. IPad 2 (8.1) (vero e proprio dispositivo) - etichetta rossa

Lo stesso vale per IPad Air/IPad mini e ogni altro iPad con iOS 7.1 mi sono imbattuto in

Fondamentalmente io Lo vedo sullo storyboard universale, quando imposti la famiglia di dispositivi per IPad in iOS 7.1 lo storyboard è considerato di dimensioni compatte. Devo essere compatibile con IOS 7.1 e la mia applicazione verrà rilasciata solo per IPad all'inizio. Qualcuno ha la minima idea su come risolverlo?

Modifica

Secondo Apple Documentation: Per le applicazioni che supportano le versioni di iOS prima di iOS 8, la maggior parte delle classi dimensionali sono compatibili. Classi di dimensioni compatibili all'indietro finché

  1. L'applicazione è costruito utilizzando Xcode versione 6 o successiva

  2. La destinazione di distribuzione della app è precedente iOS 8

  3. Classi di dimensioni sono specificato in uno storyboard o xib

  4. Il valore del componente altezza non è compatto

Tutti i precedenti si applica al mio esempio.

+0

hai eliminato l'applicazione dal dispositivo reale prima di eseguire nuovamente? a volte i file storyboard non vengono sovrascritti correttamente ... – nburk

+0

Sì, eliminato dal dispositivo e creato una build pulita – MichaelB

+0

Se si esegue il progetto con Universal Device Family su iOS 7.1 e si passa alla famiglia di dispositivi iPad, sarà sempre corretto, ma questo non risolve il problema. – gabbler

risposta

0

SIMULATORE VS. DISPOSITIVO? Sono stato in grado di riprodurre il problema segnalato nel simulatore.

Penso che tu stia partendo dal presupposto che il tuo simulatore funzioni correttamente, perché è il risultato dell'output che ti aspetti, ed è l'iPad che sta visualizzando il layout 'sbagliato'.Tuttavia, vale la pena considerare se l'iPad sta effettivamente visualizzando l'output standard per la tua configurazione, anche se quell'uscita rappresenta un bug. L'anteprima di Storyboard in Xcode mostra il comportamento corretto per la configurazione, ma non è corretta nel simulatore per iPad 2 (7.1) e, in effetti, anche per altri modelli di iPad con iOS 7.1. Il comportamento previsto è visto per iOS 8.x nel simulatore. Non si tratta quindi di un problema di simulatore o dispositivo. Sospetto che il motivo per cui stavi vedendo risultati diversi nel tuo simulatore era che non avevi fatto una build pulita poiché alcune modifiche importanti lo avevano causato, quindi usava ancora un vecchio XIB, dato che questi sono memorizzati nella cache più a lungo di quanto dovrebbero a volte.

CAUSE DI EMISSIONE? Si sta impostando la famiglia di dispositivi del progetto per scegliere come target solo iPad, ma nello storyboard è inclusa una classe di dimensioni Compact Width | Any Height, una classe di dimensioni che un iPad non dovrebbe mai utilizzare. Questo potrebbe essere un aspetto della configurazione che sta provocando questo problema. Detto questo, non dovrebbe ancora verificarsi. Questo problema si verifica con entrambi Xcode 6.1 e non è diverso nella versione 6.2 beta corrente.

Potrebbe esserci un aspetto specifico della configurazione corrente che lo sta attivando. In particolare, il layout automatico e i target del dispositivo sono influenzati dalle schermate di avvio in alcuni modi documentati ma spesso inaspettati dallo sviluppatore. (Ad esempio, l'utilizzo di uno storyboard per una schermata di avvio renderà la tua app silenziosamente disponibile universalmente, anche se hai specificato che dovrebbe essere solo iPhone nel tuo target.) Ci sono altri casi (vedi this Stack Overflow question and answer) dove migrare le immagini di lancio in un altro la configurazione ha risolto problemi simili. Quindi varrebbe la pena provare.

+0

Ciao Duncan, ho provato a migrare l'immagine di avvio come suggeriva, seguendo il link che hai condiviso ma non risolveva il problema per il mio caso – MichaelB

0

Ho provato a confrontare i file intermedi creati nella cartella di build xcode, ma per quanto posso dire non c'è dipendenza nel dispositivo testato (nel senso che ho impostato la destinazione di distribuzione su 7.1 non importa a quale piattaforma alla fine verrà distribuito) Quindi tendo a pensare che questo non sia un bug in xcode o ios 7.1 ma in realtà non compatibile all'indietro per questo specifico scenario.

Ho archiviato un bug per il supporto tecnico di Apple, ma finora non ho ricevuto risposta da loro. Sembra a questo punto che la soluzione alternativa sia impostare tutti i vincoli Regular width come Any width e disinstallare i vincoli Compact width e Una volta che l'applicazione è stata rilasciata per IPhone, annullare questa modifica.