Visualizza le immagini mancanti nella schermata di avvio sul dispositivo


301

Ho un'app che supporta iOS8 e versioni successive, integrata in Xcode 7 e sto usando un XIB per una schermata di avvio (non ho immagini di avvio). La vista contiene un singolo UILabel con la versione dell'app e 2 UIImageViews con immagini entrambe presenti in Images.xcassets: un logo e un'immagine splash.

UILabel e l'immagine del logo appaiono correttamente all'avvio dell'applicazione, ma l'immagine splash non funziona se eseguo l'app su un iPad Air 2 con iOS9. Ho testato su un Air e un Mini con iOS8 e simulatori iOS9 per iPad 2, iPad Air e iPad Air 2 e l'immagine appare correttamente in tutti questi.

Ho eseguito una risoluzione dei problemi di base per vedere se riuscivo a capire cosa stava succedendo ma non sono stato in grado di risolverlo e l'unica differenza che posso vedere tra l'immagine che funziona e quella che non funziona è quando l' ho aggiunta alla risorse...

Ecco una carrellata di quello che so:

  • UIImageView per l'immagine splash è nella posizione corretta, alla dimensione corretta. Posso dirlo perché ho impostato il colore di sfondo su verde solo per essere sicuro. La vista è lì, ma l'immagine non appare. Quindi suppongo che la vista non sia da biasimare.

  • L'impostazione di UIImageView per l'immagine splash per utilizzare anche l'immagine del logo fa apparire l'immagine del logo nella posizione corretta per la vista. Questo mi porta anche a ritenere che la vista non sia da biasimare.

  • Il UIImage che sto usando nella vista splash immagine è usato altrove nell'app e appare bene in quelle altre viste (l'immagine del logo è usata anche altrove nell'app e appare bene). Quindi suppongo che l'immagine sia valida e vederla apparire in altre viste non è un problema.

  • Ho confermato che le impostazioni di UIImages per il logo e lo splash nel file xcassets sono le stesse. Sono impostati su Universale, Qualsiasi larghezza e altezza, più fattori di scala, resi come impostazione predefinita. C'è una differenza: il logo ha scale 1x, 2x e 3x mentre l'immagine splash ha solo 1x e 2x, ma ho anche provato a usare UIImages con solo i valori 1x e 1x e 2x in UIView e funzionano (se lo fossero aggiunto al progetto qualche tempo fa).

  • L'aggiunta di un'altra immagine di dimensioni o formato diversi (PNG e JPG) ai miei xcasset e l'utilizzo di UIImage in UIImageView per l'immagine splash non riesce a essere visualizzato.

  • Aggiungendo un altro UIImageView al file XIB e assegnandolo a un UIImage che era già nelle xcasset funziona, l'immagine appare nella schermata di caricamento.

  • Copiare e rinominare i file di immagine utilizzati per il logo e aggiungerli al progetto, quindi anche utilizzare quel UIImage nella vista splash non riesce a essere visualizzato.

  • Ho provato a ripulire il progetto, riavviare la macchina di sviluppo, eliminare l'app da Air 2 e reinstallarla nel caso in cui fosse un problema.

Questi ultimi tre passaggi mi portano a credere che ci sia qualche problema con le immagini aggiunte dopo un certo punto della vita del file di progetto. Mentre ieri ho aggiornato a Xcode 7, l'immagine splash è stata inizialmente aggiunta in Xcode 6, ma l'immagine del logo (aggiunta anche in Xcode 6) è stata aggiunta alcuni mesi prima.

Ho esaminato i file json per l'immagine del logo e l'immagine iniziale e sembrano avere lo stesso formato. Ho anche cercato il file pbxproj alla ricerca di differenze e non ne vedo nessuna.

Quindi mi chiedevo se qualcuno avesse idea del perché la schermata di avvio potrebbe non mostrare queste nuove immagini che sto aggiungendo su Air 2 in particolare? Altre domande che ho letto in relazione alle immagini che non compaiono sembrano riguardare sia Avvia immagini, sia immagini in file XIB che hanno classi associate, nessuna delle quali sembra rilevante qui.


1
Ho intenzione di rispondere su questo: sono tornato e ho letto le risposte fornite, poi sono tornato su Xcode e ho rivisto UIImageView e l'immagine per provarli. Questa volta ha funzionato senza alcuna modifica. Non ho idea del perché: la stessa versione di Xcode, ho riavviato, ricostruito, pulito e rimosso l'app prima, lo stesso iOS, lo stesso Mac OS, ha funzionato. Quindi sfortunatamente non sono stato in grado di verificare se nessuna delle soluzioni avrebbe aiutato.
MFW,

Per me NESSUNA delle risposte fornite ha risolto il problema. Simulator, iPhone 5, iPhone 5 SE, iPad 4 visualizzano correttamente UIImageView nel mio LaunchScreen.xib, iPad Air 2 non lo mostra. Riavviato tutti i dispositivi, reinstallato su tutti i dispositivi. Il comportamento rimane.
Christian,

Ehi, dovresti accettare la risposta 130+ votata.
Khanh Nguyen,

Sono d'accordo con Khanh, funziona per la maggior parte !!
Gunjot Singh,

@MFW, ACCETTA LA RISPOSTA FFS! IM SEGNALA U AI COPS.
GeneCode

Risposte:


476

Spegni e riaccendi.

Seriamente, riavvia il dispositivo - questo è ciò che l'ha riparato per me.

Ecco cosa non ha funzionato:

  • Pulizia dei dati derivati
  • Pulizia del progetto
  • Disinstallazione dell'app dal dispositivo
  • Riavvio di Xcode
  • Riavvio del computer

Osservazioni precedenti:

Proprio come gli altri:

  • Funziona bene nel simulatore
  • Utilizzato per lavorare sui dispositivi (iPhone 5S, iPad Air)
  • Nessuna modifica al codice (verificata tramite git reset --hard HEAD), ma ha smesso di funzionare.

Quello che ricordo di aver innescato la prima build in cui ha smesso di funzionare è stato scollegare l'iPhone mentre era in esecuzione. (Non sono sicuro se è correlato.)

Tuttavia, il reset di git non risolto (combinato con tutti i passaggi puliti non funzionanti) mi dice che questo deve essere memorizzato nella cache da qualche altra parte. Molto probabilmente in uno dei file .gitignored? (Sto usando Git ignora il file per i progetti Xcode )

Una soluzione alternativa che ha funzionato per un UIImageView (in UIView che ne ha tre) ma non per gli altri è stata mettere l'immagine in un file .xcassets. Il ripristino del file di immagine normale non ha annullato la correzione. (Sembra davvero un errore di memorizzazione nella cache.)

AGGIORNAMENTO: Vedi in alto: il riavvio del dispositivo è ciò che lo ha risolto. Ho la sensazione che i dati bitmap errati vengano memorizzati nella cache sul dispositivo stesso.

Radar: http://openradar.appspot.com/23534818


31
Il semplice riavvio del simulatore l'ha fatto per me. Pazzo!
FractalDoctor

1
Grazie! Questo ha risolto anche per me.
Nome in codice

6
Pensi che gli utenti dell'App Store sperimenteranno lo stesso problema?
Adam Waite,

1
@danielstorm non ha mai scoperto di essere onesto
Adam Waite

2
Che bug ritardato, gg apple. Il riavvio del telefono ha funzionato per me, grazie.
Jacob King,

151

"La soluzione per me era semplicemente quella di assicurarmi che la casella" Cancella contesto grafico "non fosse selezionata per UIImageView nello storyboard. La semplice modifica di questo ha risolto il problema per me." Nessuna altra soluzione ha funzionato per me. Capito dal forum degli sviluppatori di Apple

inserisci qui la descrizione dell'immagine


2
Accidenti, non avrei mai pensato di provare questo. Risolve il simulatore e il dispositivo con Xcode 7.3.1 (7D1014) e iOS 9.3.2 Developer Beta 3.
Nuthatch,

3
Posso confermare che ha funzionato anche per me. Xcode 7.3 e iOS 9.3.2.
Torbjørn Kristoffersen,

1
Anche con il mio già selezionato: deselezionare e ricontrollare ha funzionato!
lonesomewhistle,

1
Bel +1 per la tua risposta, funziona anche in Xcode 8 e iOS 10
Skovie,

1
Questa è la risposta corretta Fornito su iOS 11, sul dispositivo.
jberlana,

99

Ho avuto esattamente lo stesso problema su un iPhone 6.

Il fatto molto strano è che sono stato in grado di utilizzare un'altra immagine dalle mie immagini .xcassets che avevano le stesse dimensioni, compressione, spazio colore ...

Non riesco a trovare il motivo per cui non funziona, ma ho trovato una soluzione: è sufficiente posizionare il file all'esterno di images.xcassets e utilizzare il nome completo (con estensione) in Interface Builder

splashScreen nell'esempio dello storyboard

Spero che questo aiuto!


1
Questa è stata la prima cosa che ho provato, ma non funziona per me.
Paul Slocum,

Questo ha funzionato per me; Grazie. Vorrei sapere perché funzionava solo con alcune immagini nei file xcassets ...
Christopher King,

Questo per me funziona per cominciare, ma ora le proprietà dell'immagine o dell'etichetta non vengono affatto aggiornate. Anche dopo un'azione di prodotto pulito. Presentato un bug qui: bugreport.apple.com
Philip Borges,

Il riavvio di iPhone 6s dopo l'eliminazione dell'app ha fatto il lavoro. In precedenza, era stata verificata anche la soluzione NikLanf sotto "cancella contesto grafico".
Matthew Ferguson,

Questo funziona Il motivo è che penso che a causa di .xcasset non sia ancora caricato quando viene mostrata la schermata di avvio. Se ci pensi, questo è lo scopo della schermata di avvio: un tempo di attesa per ios per caricare il contenuto dell'app, che include xcasset. La mia ipotesi è metterlo fuori funziona poiché tutto verrà caricato per primo nella cartella principale dell'app.
GeneCode

33

La seguente sequenza di operazioni ha risolto il problema per me su Xcode 7.3.1 e iOS 9.3.4:

  1. Pulisci la tua build (⌘ + ⇧ + K)
  2. Chiudi Xcode
  3. Dispositivo iOS di ripristino hardware (riavvio del pulsante Power + Home)
  4. Riavvia Xcode: lascia che l'indicizzazione finisca e si basi sul dispositivo una volta pronto.

Mi hai salvato la giornata! Grazie!
Zack Zhu,

Lavorato. Non ho eseguito i passaggi 2 e 4, forse è necessario solo un hard reset del dispositivo iOS, qualcuno può confermarlo?
Timothy LJ Stewart,

@ TimothyL.J.Stewart I passaggi 2 e 4 erano solo ulteriori passaggi precauzionali che avevo preso perché il problema era abbastanza fastidioso per me - quindi, per sicurezza. Penso che tu abbia ragione nel dire che potrebbero non essere necessari poiché non influenzano (in genere) la build.
Mayankk2308,

Xcode 8 Swift 3.0 Lo spegnimento o l'hard reset è l'unica cosa che funziona sempre e deve essere eseguita ogni volta che viene aggiunto un nuovo asset. L'eliminazione di DerivedData no. Tuttavia, l'immagine funziona correttamente nel simulatore. Questo ha sprecato così tanto del mio tempo, grazie @MayankKumar per la soluzione.
Timothy LJ Stewart,

Ha funzionato come un fascino
lborgav il

27

Molte altre risposte suggeriscono che la soluzione sia il riavvio dei dispositivi e / o la ricostruzione e / o la reinstallazione.

Mentre queste risposte funzionano per alcuni di noi, la ragione per cui queste funzionano è perché l'app è costretta a "riprendere" o "ricostruire" gli snapshot memorizzati nella cache.

Le istantanee memorizzate nella cache vengono utilizzate dalle app per presentare le immagini prima che i dati di supporto vengano caricati in memoria, incluso il catalogo delle risorse che contiene immagini dello storyboard.

Questa risposta SO di @jaga fornisce la soluzione, ma non il motivo, per cui mancano UIImageViews nella schermata di avvio sul dispositivo (ma non nel simulatore).

sfondo

Di recente ho tentato di utilizzare un carattere personalizzato nel mio file "Avvia Screen.storyboard".

Il motivo per cui non ho potuto chiarire dopo aver letto questa risposta SO di @TimCamber, che mi ha spinto a fare un po 'più di ricerca e test.

Il motivo per cui un carattere personalizzato non è incluso nel mio file Storyboard della schermata di avvio è lo stesso motivo per cui un'immagine all'interno di un catalogo di risorse non è inclusa ...

L'app prepara istantanee verticali e orizzontali della schermata di avvio dell'app dal file Storyboard della schermata di avvio e (attualmente) la salva nel pacchetto dell'app qui:

  • /Library/Caches/Snapshots/<<app_bundle>>/ e
  • /Library/Caches/Snapshots/<<app_bundle>>/downscaled/.

Questo processo è completo prima che vengano caricati tutti i file di supporto, inclusi eventuali caratteri personalizzati e il catalogo delle risorse.

Soluzione

Come menzionato sopra seguendo la soluzione di @ jaga, letteralmente tutto ciò che serve è:

  1. (vecchia scuola) aggiungi un file di immagine (.PNG) al pacchetto della tua app (come puoi vedere dallo screenshot qui sotto ho aggiunto il file di immagine nella sottodirectory Supporting Files in una sottodirectory Images), e

screenshot delle directory pertinenti in Project Navigator in Xcode

  1. fai riferimento a quell'immagine nell'oggetto UIImageView nel file Storyboard dello schermo di avvio ...

screenshot della sezione Image View per UIImageView in Attributes Inspector in Xcode


Grazie, ho lottato con questo per un po '. Per me va bene.
James Laurenstin,

ha lavorato per me direttamente. questa dovrebbe essere la risposta corretta
Mohammad Shraim,

Al momento del lancio, IOS non è stato in grado di compilare risorse, quindi posizionando l'immagine in bundle funziona. Grazie.
icould

La migliore risposta finora. Aggiungerò questo: l'immagine deve trovarsi nella directory principale del bundle dell'app. In caso contrario, è necessario fornire il percorso completo "Media / launch_v1_200_mod.png" se si memorizzano le immagini in una directory secondaria.
MoVod,

1
Ho fatto lo stesso. La mia app è già attiva, ma a volte il problema è che mostra l'immagine e talvolta mostra un quadrato con il colore bianco al centro dello schermo
Punit

21

Stavo vedendo lo stesso problema. Il riavvio del dispositivo (iPhone 6) e la ricostruzione dell'app sul dispositivo è l'unica cosa che l'ha risolto. Ho provato molti altri suggerimenti e suggerimenti ma nient'altro ha funzionato. Solo il riavvio + ricostruzione ha aiutato.


Come sarà se l'utente aggiornerà l'app dall'AppStore? Dovrà riavviare il suo dispositivo?
kokos8998,

17

La mia soluzione @iOS 11.x:

  • Usa .jpgimmagine invece di .png. Penso che le dimensioni del file immagine contino;
  • (Facoltativamente) Metti il ​​file immagine nella directory del progetto anziché .xcassets;

3
Mettere il file di immagine al di fuori di .xcassetsaiutato
Husam

@Husam Penso davvero che sia la dimensione del file che conta solo. Ho una schermata di avvio con due immagini: una grande (400 + KB .png) e un logo (10 + KB .png, all'interno di .xcassets). Il logo viene sempre visualizzato normalmente, ma quello grande no.
Ke Yang,

Hai ragione .. Dopo il mio commento il problema è apparso nuovamente dopo aver aggiunto un'altra immagine. Grazie per l'aiuto
Husam,

2
Quindi segui le tue istruzioni usando l'immagine jpg e ha funzionato
Husam

E se hai bisogno di trasparenza?
JCutting8

16

Ho avuto lo stesso per l'app installata da TestFlight. Elimina app -> quindi riavvia iPhone -> quindi reinstalla l'app funziona per me. Basta reinstallare l'app o riavviare il dispositivo non è stato d'aiuto.


Questa è l'unica cosa che ha funzionato per me - vorrei averlo visto 90 minuti fa!
KML

vorrei averlo visto 4 ore fa
gerry.liang

Ha funzionato anche per me, ma il problema è strano: |
Nishu_Priya,

8

Stavo avendo lo stesso problema, ma il riavvio del dispositivo non ha aiutato. Ciò che ha funzionato per me è stato eliminare UIImageView dal mio storyboard di lancio e aggiungerne uno nuovo.



7

Quello che ha funzionato per me è stato selezionare Ripristina contenuto e impostazioni ... dal menu Simulatore

Ripristina contenuto e menu Impostazioni


6

Porta le immagini da Image.xcassets e aggiungile di nuovo al progetto. Ha funzionato per me.


Funziona solo perché stai costringendo l'app a ricreare le istantanee della schermata di avvio, ma non è una soluzione o motivo del problema.
Andrewbuilder,

6

Rimuovi l'app dal dispositivo mobile, quindi riavvia il dispositivo mobile e installa nuovamente l'app. ora i problemi saranno risolti


5

Uso il dispositivo iPhone 5s, anche per questo problema.

Lo aggiusto da:

  • Rimuovi dati unità

  • Pulisci il progetto

  • Riavvia Xcode

  • Rimuovi il progetto dal mio dispositivo

  • Riavvia il 5s.

Penso che sia qualcosa di sbagliato in Xcode usare la memoria, il sistema potrebbe allocare un po 'di memoria per Xcode perché Xcode non è riuscito a disegnare l'immagine del pranzo (Sul mio computer, Xcode ha funzionato per diverse settimane senza chiudere)


Non lo so, ma ha funzionato .. come bene. Grazie amico per la condivisione.
Arpit B Parekh,

4

Ho avuto anche questo esatto problema in Xcode 7 con dispositivi iPad e iPhone. Anche se non ha senso, sono stato in grado di aggirare la maggior parte delle volte impostando non solo l'immagine ma anche l'immagine evidenziata nella vista dell'immagine sulla stessa immagine nelle mie immagini.asset.


Sembra essere aiutato anche per me
rafalkitta,

4

Penso che launchscreen supporti solo l'immagine in Assets.xcassets.


Ho provato tutte le risposte sopra e nessuna di esse ha funzionato per me. Ma questa risposta ha risolto il problema.
Ercan Celik,

4

ha funzionato per me.

Primo in xcode clean de project.

Se si utilizza il simulatore, eliminare l'app e riavviare.

Se si utilizza un dispositivo, eliminare l'app e riavviare il dispositivo.


3

Il riavvio di Xcode l'ha fatto per me.

Cosa non l' ha fatto:

  • Pulisci cartella build
  • Riavvia dispositivo o simulatore (l'immagine non era visibile su nessuno dei due)

3

Seleziona ImageView, quindi rimuovi l'estensione (.png o .jpg) nella scheda Impostazioni attributi> Vista immagine> Immagine> Nome immagine.

Su launchscreen.storyboard l'immagine non verrà visualizzata ma sarà presente nel dispositivo. Questo ha funzionato per me.


Anche questo era il mio problema. Stranamente ha funzionato in modo casuale su alcuni dispositivi. Xamarin-Project con Xcode 9.4 per l'editing XIB / Storyboard ...
fl034,

2

Sembrava un bug di iOS. Come a volte l'animazione del sistema scompare.

Ora ho appena riavviato l'iPhone e ha funzionato per me.


2

Nel mio caso, era il nome dell'immagine .
Ho aggiunto un'immagine denominata Default-568h@2x.pngLaunchScreen.xib, una delle mie vecchie schermate di avvio solo a scopo di test. Stavo costruendo su iPhone X Simulator, l'immagine non veniva visualizzata.

La modifica del nome in qualcosa di neutro (MyImage.png) ha risolto il problema.

Sembra che il @2xproblema fosse parte del problema -568h. Il che ha un senso su un -812h@3xdispositivo.


2

Questo è troppo importante Deve essere vuoto !Launch Screen File

inserisci qui la descrizione dell'immagine


8
Sta usando lo storyboard XIB per il lancio, questa risposta non funzionerà.
Benck,

2

La soluzione semplice è usare JPG invece di PNG.


JPEG non supporta la trasparenza.
JCutting8

1

Ho lo stesso problema con imageView uno storyboard della schermata di avvio. Ho rimosso il riferimento all'immagine dal progetto, ho rinominato la mia immagine e l'ho aggiunta di nuovo al progetto. Tutto funziona perfettamente.


1

Inoltre può 1. eliminare l'immagine del progetto 2. cambiare il nome dell'immagine 3. aggiungere l'immagine del file al progetto

Ha funzionato per me.


1

Ho avuto questo problema in iOS 10 su un iPhone 6 e anche nel simulatore. La mia immagine era in una cartella e quello sembrava essere il problema. Ho rimosso l'immagine dalla cartella in Xcode e l'ho inserita nella directory di base del progetto che ha risolto il problema.


1

Provo lo stesso. Cambio la risoluzione dell'immagine da 300 pixel / pollice, la cambio a 72. Funziona per me.


1

Il prossimo mi ha aiutato:

  • cambia "Avvia file schermo" in un altro xib
  • eseguire l'app
  • cambia indietro xib

Anche molto importante : controlla che il tuo xib non sia aperto in un'altra scheda, che può anche causarlo!


1

Ho trovato una soluzione semplice ma radicale che ha funzionato per me:

1 - Elimina il file: LaunchScreen.storyboard e spostalo nel cestino.

2 - Prodotto -> Pulito

3 - Crea un nuovo file della schermata di avvio chiamato: LaunchScreen.storyboard e inserisci le tue immagini

4 - Salva e crea

Ha funzionato per me dopo aver provato metodi complessi per ore ... Sembra che il mio LaunchScreen.storyboard fosse bloccato in scrittura e non potesse essere salvato o che uno strano processo di memorizzazione nella cache lo stesse bloccando.


1

Il nome dell'immagine è il problema. Rinomina il nome dell'immagine utilizzato nello storyboard della schermata di avvio. Assicurati di non usare caratteri diversi da quelli alfanumerici (non usare "_- & @") Ha funzionato per me come un incantesimo ..

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.