UIImageVoir les images manquantes dans l'écran de lancement sur l'appareil


301

J'ai une application qui prend en charge iOS8 et versions ultérieures, intégrée à Xcode 7 et j'utilise un XIB pour un écran de lancement (je n'ai pas d'images de lancement). La vue contient un seul UILabel avec la version de l'application et 2 UIImageViews avec des images présentes dans Images.xcassets: un logo et une image de démarrage.

L'UILabel et l'image du logo s'affichent correctement lorsque je lance l'application, mais l'image de démarrage ne s'affiche pas si j'exécute l'application sur un iPad Air 2 avec iOS9. J'ai testé sur un Air et un Mini exécutant des simulateurs iOS8 et iOS9 pour iPad 2, iPad Air et iPad Air 2 et l'image apparaît correctement dans tous ceux-ci.

J'ai effectué un dépannage de base pour voir si je pouvais comprendre ce qui se passait, mais je n'ai pas pu le résoudre et la seule différence que je peux voir entre l'image qui fonctionne et celle qui échoue, c'est quand je l'ai ajoutée au les atouts...

Voici un aperçu de ce que je sais:

  • L'UIImageView pour l'image de démarrage est au bon endroit, à la bonne taille. Je peux le dire parce que j'ai défini sa couleur d'arrière-plan sur vert juste pour être sûr. La vue est là, mais l'image n'apparaît pas. Je suppose donc que la vue n'est pas à blâmer.

  • Si vous définissez UIImageView pour que l'image de démarrage utilise également l'image du logo, l'image du logo apparaît au bon endroit pour l'affichage. Cela m'amène également à supposer que la vue n'est pas à blâmer.

  • L'image UII que j'utilise dans la vue de l'image de démarrage est utilisée ailleurs dans l'application et apparaît correctement dans ces autres vues (l'image du logo est également utilisée ailleurs dans l'application et semble correcte). Je suppose donc que l'image est valide et qu'elle apparaît dans d'autres vues n'est pas un problème.

  • J'ai confirmé que les paramètres des UIImages pour le logo et le splash dans le fichier xcassets sont les mêmes. Ils sont définis sur Universel, N'importe quelle largeur et hauteur, plusieurs facteurs d'échelle, rendus par défaut. Il y a une différence - le logo a des échelles 1x, 2x et 3x tandis que l'image de démarrage n'a que 1x et 2x, mais j'ai également essayé d'utiliser des images UII avec seulement des valeurs 1x et 1x et 2x dans UIView et elles fonctionnent (si elles étaient ajouté au projet il y a quelque temps).

  • L'ajout d'une autre image d'une taille ou d'un format différent (PNG et JPG) à mes xcassets et l'utilisation de cet UIImage dans l'UIImageView pour l'image de démarrage ne parviennent pas non plus à s'afficher.

  • Ajouter un autre UIImageView au fichier XIB et lui allouer un UIImage qui était déjà dans les travaux xcassets, l'image apparaît dans l'écran de chargement.

  • Copier et renommer les fichiers image utilisés pour le logo et les ajouter au projet, puis utiliser cet UIImage dans la vue de démarrage ne s'affiche pas non plus.

  • J'ai essayé de nettoyer le projet, de redémarrer la machine de développement, de supprimer l'application de l'Air 2 et de la réinstaller juste au cas où cela poserait un problème.

Ces trois dernières étapes m'amènent à croire qu'il y a un problème avec les images ajoutées après un certain point dans la durée de vie du fichier de projet. Hier, alors que je mettais à jour Xcode 7, l'image de démarrage a été ajoutée à l'origine dans Xcode 6, mais l'image du logo (également ajoutée dans Xcode 6) a été ajoutée quelques mois auparavant.

J'ai regardé les fichiers json pour l'image du logo et l'image de démarrage et ils semblent avoir le même format. J'ai également parcouru le fichier pbxproj à la recherche de différences et je n'en vois aucune.

Je me demandais donc si quelqu'un savait pourquoi l'écran de lancement pourrait ne pas afficher ces nouvelles images que j'ajoute spécifiquement sur l'Air 2? Les autres questions que j'ai lues concernant les images n'apparaissant pas semblent toutes se rapporter soit à Launch Images, soit à des images dans des fichiers XIB qui ont des classes associées, aucune des deux ne semble pertinente ici.


1
Je voulais répondre à cela - je suis revenu et j'ai relu les réponses fournies, puis je suis retourné à Xcode et j'ai re-édité UIImageView et l'image afin de les essayer. Cette fois, cela a fonctionné sans aucun changement. Je ne sais pas pourquoi - même version de Xcode, j'ai redémarré, reconstruit, nettoyé et supprimé l'application avant, même iOS, même Mac OS, cela a juste fonctionné. Donc, malheureusement, je n'ai pas pu vérifier si l'une des solutions aurait aidé.
MFW

Pour moi, AUCUNE des réponses fournies n'a résolu le problème. Simulator, iPhone 5, iPhone 5 SE, iPad 4 affichent tous correctement l'UIImageView dans mon LaunchScreen.xib, iPad Air 2 ne l'affichera pas. Redémarrage de tous les appareils, réinstallation sur tous les appareils. Le comportement demeure.
Christian

Hé, vous devriez accepter la réponse votée 130+.
Khanh Nguyen

Je suis d'accord avec Khanh, ça marche pour la plupart !!
gunjot singh

@MFW, ACCEPTEZ LA RÉPONSE FFS! IM REPORTING U AUX COPS.
GeneCode

Réponses:


476

Désactivez-le puis rallumez-le.

Sérieusement, redémarrez l'appareil - c'est ce qui l'a corrigé pour moi.

Voici ce qui n'a pas fonctionné:

  • Nettoyage des données dérivées
  • Nettoyage du projet
  • Désinstaller l'application de l'appareil
  • Redémarrer Xcode
  • Redémarrage de l'ordinateur

Observations plus anciennes:

Comme les autres, il:

  • Fonctionne bien dans le simulateur
  • Utilisé pour travailler sur les appareils (iPhone 5S, iPad Air)
  • Aucun changement de code (vérifié via git reset --hard HEAD), mais a cessé de fonctionner.

Ce dont je me souviens avoir déclenché la première version où il a cessé de fonctionner, c'était de débrancher l'iPhone pendant qu'il fonctionnait. (Je ne sais pas si c'est lié.)

Cependant, git reset ne le corrige pas (combiné avec toutes les étapes propres qui ne fonctionnent pas) me dit que cela doit être mis en cache ailleurs. Très probablement dans l'un des fichiers .gitignored? (J'utilise Git ignore file pour les projets Xcode )

Une solution de contournement qui fonctionnait pour un UIImageView (dans l'UIView qui en a trois) mais pas pour les autres consistait à placer l'image dans un fichier .xcassets. Le retour au fichier d'image ordinaire n'a pas annulé le correctif. (Ressemble vraiment à une erreur de mise en cache.)

MISE À JOUR: Voir en haut - le redémarrage de l'appareil est ce qui l'a corrigé. J'ai l'impression que les mauvaises données bitmap sont mises en cache sur l'appareil lui-même.

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


31
Le simple redémarrage du simulateur l'a fait pour moi. Fou!
FractalDoctor

1
Je vous remercie! Cela me l'a également corrigé.
CodenameDuchess

6
Pensez-vous que les utilisateurs de l'App Store vont rencontrer le même problème?
Adam Waite

1
@danielstorm n'a jamais été honnête
Adam Waite

2
Quel insecte retardé, gg apple. Le redémarrage de mon téléphone a fonctionné pour moi, merci.
Jacob King

151

"La solution pour moi était simplement de s'assurer que la case" Efface le contexte graphique "n'est pas cochée pour l'UIImageView dans le storyboard. Le simple fait de changer cela l'a corrigé pour moi." Aucune autre solution n'a fonctionné pour moi. Je l' ai sur le forum des développeurs Apple

entrez la description de l'image ici


2
Merde, je n'aurais jamais pensé essayer ça. Corrige Simulator et Device avec Xcode 7.3.1 (7D1014) et iOS 9.3.2 Developer Beta 3.
Nuthatch

3
Je peux confirmer que cela a également fonctionné pour moi. Xcode 7.3 et iOS 9.3.2.
Torbjørn Kristoffersen

1
Même avec le mien déjà vérifié - décocher et revérifier a fait l'affaire!
lonesomewhistle

1
Nice +1 pour votre réponse, fonctionne également dans Xcode 8 et iOS 10
Skovie

1
Ceci est la bonne réponse. Prouvé sur iOS 11, sur l'appareil.
jberlana

99

J'ai eu exactement le même problème sur un iPhone 6.

Le fait très étrange est que j'ai pu utiliser une autre image de mes images.xcassets qui avaient la même taille, compression, espace colorimétrique ...

Je ne parviens pas à comprendre pourquoi cela ne fonctionne pas, mais j'ai trouvé une solution: mettez simplement votre fichier en dehors de vos images.xcassets et utilisez son nom complet (avec extension) dans Interface Builder

splashScreen dans l'exemple de storyboard

J'espère que cette aide!


1
C'est la première chose que j'ai essayée, mais ça ne marche pas pour moi.
Paul Slocum,

Cela a fonctionné pour moi; Merci. J'aimerais bien savoir pourquoi cela ne fonctionnait que pour certaines images dans les fichiers xcassets ...
Christopher King

Cela fonctionne pour moi pour commencer, mais maintenant les propriétés de l'image ou de l'étiquette ne sont plus du tout mises à jour. Même après une action sur un produit propre. A déposé un bug ici: bugreport.apple.com
Philip Borges

Le redémarrage de l'iPhone 6s après la suppression de l'application a fait le travail. Avant cela, la solution NikLanf ci-dessous «efface le contexte graphique» était également vérifiée.
Matthew Ferguson

Cela marche. La raison en est, je pense, que .xcasset n'est pas encore chargé lorsque l'écran de lancement est affiché. Si vous y réfléchissez, c'est à cela que sert l'écran de lancement - un temps d'attente pour ios pour charger le contenu de l'application, qui comprend xcasset. Je suppose que le mettre à l'extérieur fonctionne car tout dans le dossier racine de l'application sera chargé en premier.
GeneCode

33

La séquence d'opérations suivante a résolu le problème pour moi sur Xcode 7.3.1 et iOS 9.3.4:

  1. Nettoyez votre build (⌘ + ⇧ + K)
  2. Fermer Xcode
  3. Réinitialisation matérielle du périphérique iOS (redémarrage du bouton d'alimentation + bouton d'accueil)
  4. Relancez Xcode - laissez l'indexation se terminer et construire sur l'appareil une fois qu'il est prêt.

J'ai sauvé ma journée! Merci!
Zack Zhu

Travaillé. Je n'ai pas fait les étapes 2 et 4, Peut-être qu'une réinitialisation matérielle de l'appareil iOS est peut-être nécessaire, quelqu'un peut-il confirmer cela?
Timothy LJ Stewart

@ TimothyL.J.Stewart Les étapes 2 et 4 n'étaient que des mesures de précaution supplémentaires que j'avais prises parce que le problème était assez gênant pour moi - c'était juste pour être sûr. Je pense que vous avez raison de dire qu'ils pourraient être inutiles car ils n'affectent pas vraiment (généralement) la construction.
mayankk2308

Xcode 8 Swift 3.0 La mise hors tension ou la réinitialisation matérielle est la seule chose qui fonctionne à chaque fois et doit être effectuée chaque fois qu'un nouvel élément est ajouté. La suppression de DerivedData ne le fait pas. Cependant, l'image fonctionne correctement dans le simulateur. Cela m'a fait perdre tellement de temps, merci @MayankKumar pour la solution.
Timothy LJ Stewart

A fonctionné comme un charme
lborgav

27

De nombreuses autres réponses suggèrent que le redémarrage des appareils et / ou la reconstruction et / ou la réinstallation est la solution.

Bien que ces réponses fonctionnent pour certains d'entre nous, la raison pour laquelle ces travaux sont dus au fait que l'application est obligée de «reprendre» ou de «reconstruire» les instantanés mis en cache.

Les instantanés mis en cache sont utilisés par les applications pour présenter des images avant le chargement des données de prise en charge, y compris le catalogue d'actifs qui contient des images de storyboard.

Cette réponse SO de @jaga fournit la solution, mais pas la raison, pour expliquer pourquoi UIImageViews manque dans l'écran de lancement sur l'appareil (mais pas dans le simulateur).

Contexte

Récemment, j'ai tenté d'utiliser une police personnalisée dans mon fichier "Launch Screen.storyboard".

La raison pour laquelle je ne pouvais pas devenir clair après avoir lu cette réponse SO par @TimCamber, ce qui m'a incité à faire un peu plus de recherches et de tests.

La raison pour laquelle une police personnalisée n'est pas incluse dans mon fichier Storyboard Launch Screen est la même raison pour laquelle une image dans un catalogue d'actifs n'est pas incluse ...

L'application prépare des instantanés portrait et paysage de l'écran de lancement de l'application à partir de votre fichier Storyboard Launch Screen et (actuellement) l'enregistre dans votre bundle d'application ici:

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

Ce processus est terminé avant le chargement des fichiers de prise en charge, y compris les polices personnalisées et le catalogue d'actifs.

Solution

Comme mentionné ci-dessus en suivant la solution de @ jaga, il suffit littéralement de:

  1. (old school) ajoutez un fichier image (.PNG) au bundle de votre application (comme vous pouvez le voir sur la capture d'écran ci-dessous, j'ai ajouté le fichier image sous le sous-répertoire Supporting Files dans un sous-répertoire Images), et

capture d'écran des répertoires pertinents dans Project Navigator dans Xcode

  1. référencer cette image dans votre objet UIImageView dans le fichier Launch Screen Storyboard ...

capture d'écran de la section Image View pour UIImageView sous Inspector Inspector dans Xcode


Merci, je lutte avec ça depuis un petit moment. Ça marche pour moi.
James Laurenstin

travaillé pour moi directement. cela devrait être la bonne réponse
Mohammad Shraim

Au lancement, IOS n'a pas été en mesure de compiler les ressources. Le placement de votre image dans un ensemble fonctionne donc. Merci.
icould

Jusqu'à présent, la meilleure réponse. J'ajouterai ceci: l'image doit être dans le répertoire racine du bundle d'application. Sinon, vous devez donner le chemin complet "Media / launch_v1_200_mod.png" si vous stockez des images dans un sous-répertoire.
MoVod

1
J'ai fait la même chose. Mon application est déjà en ligne mais le problème est parfois qu'elle montre l'image et parfois elle montre un carré de couleur blanche au milieu de l'écran
Punit

21

Je voyais le même problème. Redémarrer l'appareil (iPhone 6) et reconstruire l'application sur l'appareil est la seule chose qui l'a corrigé. J'ai essayé de nombreux autres conseils et suggestions, mais rien d'autre n'a fonctionné. Seul le redémarrage + la reconstruction ont aidé.


À quoi cela ressemblera-t-il si l'utilisateur met à jour l'application depuis l'AppStore? Aura-t-il besoin de redémarrer son appareil?
kokos8998

17

Ma solution @iOS 11.x:

  • Utilisez l' .jpgimage au lieu de .png. Je pense que la taille du fichier image est importante;
  • (Facultatif) Placez le fichier image dans le répertoire du projet plutôt que .xcassets;

3
Mettre le fichier image en dehors de .xcassetsaidé
Husam

@Husam Je pense vraiment que c'est la taille du fichier qui compte. J'ai un écran de lancement avec deux images: une grande (400 + KB .png) et un logo (10 + KB .png, à l'intérieur de .xcassets). Le logo s'affiche toujours normalement, mais pas le grand.
Ke Yang

Vous avez raison .. Après mon commentaire, le problème est réapparu après avoir ajouté une autre image. Merci pour votre aide
Husam

2
Ensuite, j'ai suivi vos instructions en utilisant l'image jpg et travaillé
Husam

Et si vous avez besoin de transparence?
JCutting8 Il y a

16

J'avais la même chose pour l'application installée à partir de TestFlight. Supprimer l'application -> puis redémarrer l'iPhone -> puis réinstaller l'application fonctionne pour moi. Réinstaller l'application ou redémarrer l'appareil n'a pas aidé.


C'est la seule chose qui a fonctionné pour moi - j'aurais bien aimé l'avoir vu il y a 90 minutes!
KML

J'aimerais avoir vu ça il y a 4 heures
gerry.liang

A aussi fonctionné pour moi, mais le problème est bizarre: |
Nishu_Priya

8

J'avais le même problème, mais le redémarrage de l'appareil n'a pas aidé. Ce qui a fonctionné pour moi a été de supprimer l'UIImageView de mon storyboard de lancement et d'en ajouter un nouveau.



7

Ce qui a fonctionné pour moi, c'était de sélectionner Réinitialiser le contenu et les paramètres ... dans le menu Simulateur

Réinitialiser le contenu et le menu Paramètres


6

Sortez les images d' Image.xcassets et ajoutez-les à nouveau au projet. Ça a marché pour moi.


Cela ne fonctionne que parce que vous forcez l'application à recréer les instantanés de l'écran de lancement, mais ce n'est pas une solution ou une raison au problème.
andrewbuilder

6

Supprimez l'application du mobile, puis redémarrez le mobile et réinstallez l'application. maintenant les problèmes seront résolus


5

J'utilise l'appareil iPhone 5s, rencontre également ce problème.

Je le répare en:

  • Supprimer les données du lecteur

  • Nettoyer le projet

  • Redémarrez Xcode

  • Supprimer le projet de mon appareil

  • Redémarrez les 5s.

Je pense que Xcode a quelque chose de mal à utiliser la mémoire, le système peut allouer un peu de mémoire pour Xcode car le dessin de Xcode l'image du déjeuner a échoué (sur mon ordinateur, Xcode a fonctionné pendant plusieurs semaines sans fermer)


Je ne sais pas, mais ça a fonctionné .. comme bon. Merci pour le partage.
Arpit B Parekh

4

J'ai également eu ce problème exact dans Xcode 7 avec des appareils iPad et iPhone. Bien que cela n'ait aucun sens, j'ai pu la contourner la plupart du temps en définissant non seulement l'image mais également l'image en surbrillance dans la vue d'image sur la même image dans mes images.xcassets.


Semble être aidé pour moi aussi
rafalkitta

4

Je pense que launchscreen ne prend en charge que l'image dans Assets.xcassets.


J'ai essayé toutes les réponses ci-dessus et aucune d'entre elles n'a fonctionné pour moi. Mais cette réponse a résolu le problème.
Ercan Celik

4

ça a marché pour moi.

Premier dans xcode clean de project.

Si vous utilisez le simulateur, supprimez l'application et relancez.

Si vous utilisez un appareil, supprimez l'application et redémarrez l'appareil.


3

Le redémarrage de Xcode l'a fait pour moi.

Ce qui ne l'a pas fait:

  • Nettoyer le dossier de construction
  • Redémarrez l'appareil ou le simulateur (l'image n'était pas visible non plus)

3

Sélectionnez ImageView, puis supprimez l'extension d'image (.png ou .jpg) dans l'onglet Inspecteur d'attributs> Vue d'image> Image> Nom de l'image.

Sur launchscreen.storyboard, l'image n'apparaîtra pas mais elle sera là dans l'appareil. Cela a fonctionné pour moi.


C'était aussi mon problème. Étrangement, cela a fonctionné au hasard sur certains appareils. Xamarin-Project avec Xcode 9.4 pour l'édition XIB / Storyboard ...
fl034

2

Cela semblait être un bug d'iOS. Comme parfois, l'animation du système a disparu.

Maintenant, je viens de redémarrer l'iPhone et cela fonctionne pour moi.


2

Dans mon cas, c'était le nom de l' image .
J'ai ajouté une image nommée Default-568h@2x.pngà LaunchScreen.xib - l'un de mes anciens écrans de lancement juste à des fins de test. Je construisais sur l'iPhone X Simulator, l'image ne s'est pas affichée.

Changer le nom en quelque chose de neutre (MyImage.png) a résolu le problème.

Il semble que cela @2xfaisait partie du problème ainsi que le -568h. Ce qui est logique sur un -812h@3xappareil.


2

C'est trop important Doit être vide !Launch Screen File

entrez la description de l'image ici


8
Il utilise le storyboard XIB pour le lancement, cette réponse ne fonctionnera pas.
benck

2

Une solution simple consiste à utiliser JPG au lieu de PNG.


JPEG ne prend pas en charge la transparence.
JCutting8 Il y a

1

J'ai le même problème avec imageView un storyboard d'écran de lancement. J'ai supprimé la référence de l'image du projet, j'ai renommé mon image et l'ai ajoutée à nouveau au projet. Tout fonctionne parfaitement.


1

Peut également 1. supprimer l'image du projet 2. changer le nom de l'image 3. ajouter l'image du fichier au projet

Ça a marché pour moi.


1

J'ai eu ce problème dans iOS 10 sur un iPhone 6 et également dans le simulateur. Mon image était dans un dossier et cela semblait être le problème. J'ai supprimé l'image du dossier dans Xcode et l'ai placée dans le répertoire de base du projet, ce qui a résolu le problème.


1

J'expérimente la même chose. Je change la résolution de l'image de 300 pixels / pouce, changez-la à 72. Cela fonctionne pour moi.


1

Ensuite m'a aidé:

  • changer "Launch Screen File" en un autre xib
  • lancez l'application
  • changer xib en arrière

Très important aussi : vérifiez que votre xib n'est pas ouvert dans un autre onglet, cela peut aussi le provoquer!


1

J'ai trouvé une solution simple mais radicale qui a fonctionné pour moi:

1 - Supprimez le fichier: LaunchScreen.storyboard et déplacez-le dans la corbeille.

2 - Produit -> Nettoyer

3 - Créez un nouveau fichier d'écran de lancement nommé: LaunchScreen.storyboard et mettez vos images dedans

4 - Enregistrer et construire

Cela a fonctionné pour moi après avoir essayé des méthodes complexes pendant des heures ... Il semble que mon LaunchScreen.storyboard était verrouillé en écriture et ne pouvait pas être enregistré ou un processus de mise en cache étrange le bloquait.


1

Le nom de l'image est le problème. Renommez le nom de l'image utilisé dans le storyboard de l'écran de lancement. Assurez-vous de ne pas utiliser de caractère autre que alphanumérique (n'utilisez pas "_- & @") Fonctionne pour moi comme un charme ..

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.