Problemi di layout dopo l'aggiornamento a Xcode 8


102

Ecco un prima e un dopo di uno dei miei schermi dopo l'aggiornamento a Xcode 8.
Tutto quello che ho fatto è stato aprire il mio main.storyboard e da lì ho creato ed eseguito la mia app sul mio telefono.
Nel mio controllo della versione, posso vedere che Xcode sta apportando molte modifiche al mio main.storyboard solo da me che lo apro.
Ogni volta che elimino queste modifiche, posso vedere ciò che uso per vedere in Xcode 7.3.1.
Ma, non appena riapro il generatore di interfacce con il mio storyboard, vedo quei cambiamenti tornare a posto.

C'è qualcosa che posso fare qui?

Prima di Xcode 8

inserisci qui la descrizione dell'immagine

Dopo l'aggiornamento a Xcode 8

inserisci qui la descrizione dell'immagine


Prova ad aprire di nuovo XCode 8 con una nuova fonte (conserva tutte le modifiche apportate in precedenza). Ora, quando apri lo storyboard, evidenzia tutti gli elementi dell'interfaccia utente e fai clic su "Aggiorna frame". Questo potrebbe risolvere il tuo problema.
d1str0

6
Potresti segnalare un bug su bugreport.apple.com e allegare lo storyboard per il quale sta accadendo? Vorremmo analizzare ulteriormente questo aspetto.
Quinn Taylor

1
Ho lo stesso identico problema. Dopo aver aperto il mio storyboard in Xcode8 e accettato la finestra di dialogo "Scegli una visualizzazione iniziale del dispositivo", tutto si comporta in modo strano. Quando aggiorno tutti i frame, l'IB sembra a posto, ma dopo la creazione l'app è completamente rotta. Testato con 4 app.
Cherrypig

@QuinnTaylor Sto riscontrando un problema simile, dopo che Xcode 8 converte il mio storyboard, UIImageViews in UITableViews non mostra alcun contenuto sebbene il loro contorno sia visibile in Debug View Hierarchy. Altri oggetti della stessa classe che si trovano in UICollectionViews non sono interessati.
Manuel

XIB o Storyboard impostano come predefinito la versione precedente 7.xe Salva e chiudi. Soluzione temporanea, ma funziona. Non riaprire dopo aver eseguito Salva e chiudi. Altrimenti è necessario seguire nuovamente gli stessi passaggi dall'inizio.
Bhavesh Kumbhani,

Risposte:


111

Ho avuto un problema simile con le immagini tableview che non apparivano una volta convertito il file storyboard per essere compatibile con Xcode8. Sembra un bug con Xcode8, quindi fino a quando non viene rilasciata una correzione di bug, ecco una soluzione:

  1. Apri lo storyboard in Xcode 8 e scegli una visualizzazione iniziale del dispositivo. Apporta le modifiche come faresti normalmente.
  2. Dopo aver completato le modifiche, seleziona lo storyboard -> File Inspector -> Si apre in -> Seleziona "Xcode 7.x".

inserisci qui la descrizione dell'immagine

  1. Seleziona "Salva e chiudi" quando richiesto
  2. Le modifiche allo storyboard verranno salvate e lo storyboard funzionerà come prima di Xcode8.

Quando è necessario apportare altre modifiche al file dello storyboard, eseguire nuovamente questi passaggi.


Wow +1 per questo di sicuro. Ho lottato con questo in iOS 10 nella mia TodayExtension. È stato solo quando ho ristretto le cose, analizzando le differenze git, che ho visto modifiche xml dello storyboard sospette aggiunte da Xcode 8. Dopo aver salvato il documento dello storyboard per Xcode 7 (dopo aver apportato le mie modifiche), ora posso creare e spedire usando Xcode 8 per iOS 10. Grazie.
John Erck,

Di sicuro sembra un bug. Salvare come Open in Xcode 7.x ha funzionato per me come soluzione temporanea.
Steve A,

Ho passato gli ultimi 3 giorni a riparare tutto il layout rotto da un posto all'altro in Xcode8 finché non ho trovato questo post. Probabilmente dovrei fidarmi di persone come voi più di Apple. non posso credere che questo abbia sprecato così tanto del mio tempo. Grazie mille David per questo!
Xu Yin,

@XuYin Dovremmo farlo per ogni storyboard? Voglio dire, cosa succede se ho un altro storyboard nel mio progetto? E i file Xib? dovrei farlo anche per quelli?
Miele

@ Honey non l'ho fatto sullo storyboard, ma l'ho fatto su ogni file xib con cui ho problemi. ma penso che potresti provare anche sullo storyboard se vedi strani problemi di layout. poiché quella correzione richiederà solo 5 secondi. e dopo aver ricostruito l'app, dovresti essere in grado di vedere la correzione molto rapidamente.
Xu Yin,

14

XIB o Storyboard impostano come predefinito la versione precedente 7.xe Salva e chiudi. Soluzione temporanea, ma funziona. Non riaprire dopo aver eseguito Salva e chiudi. Altrimenti è necessario seguire nuovamente gli stessi passaggi dall'inizio.inserisci qui la descrizione dell'immagine


6
Questo non aiuta perché devo lavorare sul file. Tutto ciò che fa è salvare il file per compatibilità con le versioni precedenti. Non consente la modifica di
xib

lo sto facendo, ma ancora una volta quando seleziono il file xib nel menu a discesa mostra solo xcode 8.0 ...
jayant rawat

8

Eh lo stesso problema. Sono riuscito parzialmente a risolverlo nel modo seguente ( per Xcode versione 8.1 (8B62) )

Nella struttura del documento di Storyboard, ho fatto clic su ciascuna scena che aveva la freccia gialla che indicava alcuni problemi di layout (Numero 1 sullo screenshot)

Dopodiché, per ogni scena problematica, dovevo fare clic sulla piccola icona "Aggiorna fotogrammi" (Numero 2 sullo screenshot) che risolveva tutti i problemi di layout per scena.

inserisci qui la descrizione dell'immagine

Tuttavia una scena nel mio caso era ancora in stato di pianto dopo il passaggio da Xcode7 a Xcode8. Ho dovuto risolverlo manualmente regolando i vincoli o aggiungendo vincoli mancanti.

Uff, non bella sorpresa di XCode8 e Storyboard. Se hai utilizzato l'editor di AppCode, non avrai questo problema, poiché non supporta gli Storyboard; P

In bocca al lupo!



6

Si prega di seguire i thread per qualsiasi possibile soluzione: (credo che succeda a molti sviluppatori).
Xcode 8 GM seed Problema con lo storyboard
Xcode 8 - Gli storyboard precedenti

venivano distorti (ho usato anyH anyW larghezza 600) Quando Xcode aggiornato a Xcode 8 ha cambiato tutte le dimensioni dei miei ViewControllers. Di conseguenza, tutto il layout è stato distorto.
Al momento vedo solo 3 soluzioni per il problema (non mi fiderei di aspettare presto una soluzione).

1.Vai per ogni Viewcontroller e risolvilo Update Frames.

2.Vai al ViewController principale Size Inspector -> Freeform -> 600poiché si deduce che la maggior parte dei controller cambierà le dimensioni per tutti (fai attenzione all'impatto delle nuove funzionalità che Apple voglio introdurre).

3. Elimina le modifiche in git per lo storyboard (non lo suggerirei perché Apple ha anche inserito alcuni aggiornamenti che potrebbero essere importanti per Xcode).

Link aggiuntivo per le nuove funzionalità di AutoLayout in Xcode 8 (WWDC16): Making Apps Adaptive, Part 1


1
L'opzione 1 è la più sensata e ha funzionato per me. Come nota Mike.R, fai attenzione a cercare di "ingannare" XCode per sistemare le cose poiché più problemi lungo la pista sono inevitabili.
arcady bob

Ho usato anche l'opzione 1 (penso sia più sicura). Ma richiede tempo.
Mike.R

5

Nel mio caso funzionano le soluzioni suggerite da Akhil Kateja e devo anche reimpostare Larghezza e Altezza della vista principale:

1) Imposta le dimensioni della vista su Formato libero

inserisci qui la descrizione dell'immagine

2) Ripristina larghezza e altezza della vista alle dimensioni originali:

inserisci qui la descrizione dell'immagine

Finalmente salva e hai finito.


4

Per me la soluzione era semplicemente fare clic su UIViewController con problemi e poi Editor > Resolve Auto Layout Issues > All Views In ... > Updates Frames

Ha riorganizzato le visualizzazioni per adattarsi ai vincoli esistenti in base alla visualizzazione predefinita appena selezionata (iPhone 7 nel mio caso).

Nota anche: se ricevi un avviso di visualizzazione errata della barra di navigazione come ho fatto io, seleziona semplicemente UINavigationController / UIViewController e poi Attributes Inspector > Bar Visibility > Shows Navigation Bar- disattivalo e poi di nuovo ON.


3

L'impostazione delle dimensioni della vista su Freeform da Inferred ha funzionato per me. Può essere trovato sotto il titolo Metriche simulate in Attributes Inspector .


3

Ho avuto lo stesso problema e l'ho risolto con l'aggiornamento forzato dei vincoli di visualizzazione del controller. Inserisci il codice seguente nella funzione viewDidLoad ()

self.view.layoutIfNeeded()

1
Saluti Bill! quel 'layoutIfNeeded' ha funzionato per me! (Dopo aver provato tutto il resto per ore ..)
Ethan Halprin

3

Ho selezionato ogni controller e ho cliccato su "Update Frames" e ha corretto il layout.


3

La risposta di @ david-truong ( https://stackoverflow.com/a/39589860/1407528 ) non funziona nel mio caso, quindi se ti trovi nella mia stessa situazione, prova questo:

Nel caso in cui tutti i tuoi dispositivi siano aggiornati a iOS 10+, questa versione di Xcode non riconoscerà quei dispositivi come dispositivi compatibili. Quindi, prova con questo trucco:

  • Vai a: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Copia le cartelle relative a iOS 10 o 10.1 in: / Applications / Xcode 7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Apri il progetto con Xcode 7.3.1 (riavvia Xcode se lo hai già aperto)
  • Seleziona il tuo dispositivo iOS 10+ connesso
  • Push Run

Nota: nuove funzionalità come Swift non saranno disponibili utilizzando questo trucco, ma dovresti essere in grado di caricare e creare il tuo progetto.


3

Spero che questo ti aiuti

Quando ho aggiornato Xcode da 7.3 a Xcode 8 ed ho eseguito l'app, alcune delle visualizzazioni sono visualizzate perfettamente ma alcune sono distorte, quindi ho controllato il file pennino e mi ha chiesto di scegliere la dimensione del dispositivo particolare e quindi mostrare il pennino in base a quello dimensione del dispositivo che non è normale Any-Any(Xcode 7.3). Quindi tutti i file dei pennini non vengono visualizzati in modo corretto.

La soluzione funziona da me: - premere la freccia gialla come mostrato nell'immagine sotto

inserisci qui la descrizione dell'immagine

richiederà un pop-up che mostra opzioni come

inserisci qui la descrizione dell'immagine

scegli Update Framescon controllato.it Apply to all views in containerrisolverà circa il 90% dell'interfaccia utente distorta e il resto del problema dei vincoli di layout automatico può essere risolto manualmente.


Questo potrebbe anche rovinare i layout. IMHO questo deve essere fatto con molta cura, una visualizzazione alla volta e controllare se le cose hanno funzionato prima di continuare.
brainray

sì, ovviamente è necessario dedicare un po 'di tempo e questa soluzione potrebbe aiutarti in un periodo più lungo come quando desideri aggiornare parte della tua interfaccia utente.
Anurag Bhakuni


1

Per risolvere un problema simile, ho configurato xib come Freeform (non dedotto) E ho salvato il file xib come compatibile con Xcode 7.x. Entrambi i passaggi erano necessari nel mio caso. Spero che aiuti!


1

Noto un nuovo pulsante in Xcode 8.2, (controlla il cerchio arancione nell'immagine). Ti darà un aiuto.

Passaggi: 1. Apri lo storyboard e seleziona il dispositivo che desideri 2. Seleziona il controller di visualizzazione 3. Fai clic sul pulsante menzionato (come nell'immagine) 4. Aggiornerà il frame per quel controller di visualizzazione e potrai procedere con esso

Non ho trovato soluzione migliore di questa. Per favore rispondi se ne trovi uno.

Screenshot IB


Non è successo niente.
Muju

0

aggiornare i vincoli e le visualizzazioni secondarie del layout in viewdidload risolve il problema

- (void) viewDidLoad {
        [self.view updateConstraints];
        [self.view layoutSubviews];
        [super viewDidLoad];
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.