web-dev-qa-db-fra.com

UIImageView manque les images dans l'écran de démarrage du périphérique

J'ai une application compatible avec iOS8 et les 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.

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 je lance l'application sur un iPad Air 2 avec iOS9. J'ai testé sur un Air et un Mini fonctionnant sous iOS8 et sur des simulateurs iOS9 pour iPad 2, iPad Air et iPad Air 2, et l'image apparaît correctement dans tous ceux-ci.

J'ai effectué quelques dépannages de base pour voir si je pouvais comprendre ce qui se passait, mais je n'ai pas réussi à le résoudre et la seule différence que je peux voir entre l'image qui fonctionne et celle qui ne fonctionne pas est quand I ajouté à l'actif ...

Voici un aperçu de ce que je sais:

  • UIImageView pour l'image de démarrage est au bon endroit, à la taille correcte. Je peux le dire parce que je mets la couleur de fond en vert pour s'en assurer. La vue est là, mais l'image n'apparaît pas. Donc, je suppose 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, celle-ci apparaît à l'emplacement approprié pour la vue. Cela m'amène aussi à supposer que la vue n'est pas à blâmer.

  • Le UIImage que j'utilise dans la vue d'image splash est utilisé 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 que son affichage dans d'autres vues ne pose pas de problème.

  • J'ai confirmé que les paramètres des UIImages pour le logo et le démarrage dans le fichier xcassets sont identiques. Ils sont définis sur Universel, Toutes largeurs et hauteurs, plusieurs facteurs d’échelle, rendus par défaut. Il y a une différence - le logo a des échelles 1x, 2x et 3x alors que l'image splash n'a que 1x et 2x, mais j'ai aussi essayé d'utiliser UIImages avec seulement 1, et 1x et 2x valeurs dans UIView et ils fonctionnent (s'ils é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 UIImageView pour l'image de démarrage échouent également à s'afficher.

  • En ajoutant un autre UIImageView au fichier XIB et en lui allouant un UIImage qui était déjà dans le travail xcassets, l’image apparaît dans l’écran de chargement.

  • La copie et le changement de nom des fichiers d’image utilisés pour le logo et leur ajout au projet, puis l’utilisation de cette UIImage dans la vue de démarrage échouent également.

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

Ces trois dernières étapes m'amènent à penser qu'il existe un problème avec les images ajoutées après un certain point dans la durée de vie du fichier de projet. Tandis que je mettais à jour Xcode 7 hier, 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 examiné les fichiers json pour l'image de 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 ne les vois pas.

Je me demandais donc si quelqu'un avait une idée de la raison pour laquelle l'écran de lancement ne pouvait pas afficher ces nouvelles images que j'ajoute spécifiquement sur Air 2? D'autres questions que j'ai lues et qui concernent des images qui n'apparaissent pas semblent toutes concerner soit des images de lancement, soit des images de fichiers XIB associées à des classes, qui ne semblent pas pertinentes ici.

287
MFW

Éteignez puis rallumez-vous.

Sérieusement, redémarrez l’appareil - c’est ce qui m’a réglé le problème.

Voici ce qui n’a pas marché:

  • Nettoyage DerivedData
  • Nettoyage du projet
  • Désinstallation de l'application depuis l'appareil
  • Redémarrage de Xcode
  • Redémarrer l'ordinateur

Observations plus anciennes:

Tout 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 qui ne fonctionnait plus.

Ce dont je me souviens avoir déclenché la première version où il ne fonctionnait plus, c’était de débrancher l’iPhone en cours de fonctionnement. (Je ne sais pas si c'est lié.)

Cependant, la réinitialisation de git qui ne résout pas le problème (combinée avec toutes les étapes de nettoyage 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 le fichier pour les projets Xcode

Une solution de contournement qui fonctionnait pour un UIImageView (dans UIView qui en comptait trois) mais pas pour les autres était de placer l'image dans un fichier .xcassets. Le retour au fichier image brut n’annule pas le correctif. (Cela ressemble vraiment à une erreur de cache.)

UPDATE: 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 le périphérique lui-même.

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

457
Aral Balkan

"La solution pour moi était simplement de m'assurer que la case" Contexte graphique de Clears "n'était pas cochée pour UIImageView dans le storyboard. Le simple fait de changer cela a résolu le problème pour moi." Je viens de Forum des développeurs Apple

 enter image description here

142
NikLanf

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

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

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

 splashScreen in storyboard sample

J'espère que cette aide!

94
gbitaudeau

La séquence d'opérations suivante a résolu le problème pour moi sous 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 se construire sur le périphérique une fois prêt.
32
mayankk2308

De nombreuses autres réponses suggèrent de redémarrer les périphériques et/ou de reconstruire et/ou de réinstaller la solution. 

Bien que ces réponses fonctionnent pour certains d'entre nous, elles s'expliquent par le fait que l'application est forcée de "reprendre" ou de "reconstruire" les instantanés mis en cache. 

Les applications utilisent les instantanés mis en cache pour présenter les images avant le chargement en mémoire des données de support, y compris le catalogue d'actifs contenant des images de storyboard. 

Cette SO réponse by @jaga fournit la solution, mais pas la raison, pour laquelle UIImageViews manque dans l'écran de lancement sur le périphérique (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 être clair après avoir lu cette SO réponse de @TimCamber, 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 Story Screen 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 démarrage de l'application à partir de votre fichier Storyboard de lancement et l'enregistre (actuellement) dans votre bundle d'applications ici:

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

Ce processus est terminé avant le chargement des fichiers de support, 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 paquet de votre application (comme vous pouvez le voir sur la capture d'écran ci-dessous, j'ai ajouté le fichier image dans le sous-répertoire Supporting Files du sous-répertoire Images), et 

 screenshot of relevant directories in Project Navigator in Xcode

  1. référencer cette image dans votre objet UIImageView dans le fichier de scénario de lancement Screen ...

 screenshot of Image View section for UIImageView under Attributes Inspector in Xcode

26
andrewbuilder

Je voyais le même problème. Le redémarrage de l'appareil (iPhone 6) et la reconstruction de l'application sur l'appareil sont les seuls éléments qui l'ont réparée. J'ai essayé beaucoup d'autres astuces et suggestions mais rien d'autre n'a fonctionné. Seulement reboot + reconstruire aidé.

20
Bruce L

J'avais le même pour l'application installée à partir de TestFlight. Supprimer l'application -> puis redémarrer l'iPhone -> puis réinstaller l'application fonctionne pour moi .

15
Petro Shm

Ma solution @iOS 11.x:

  • Utilisez .jpg image 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;
14
keyOfVv

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 UIImageView de mon storyboard de lancement et d’en ajouter un nouveau.

8
Jim Rhoades

Avez-vous essayé d'éteindre et d'allumer l'appareil? Fais le.

7
Jakub Truhlář

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

 Reset content and Settings menu

7
andnil

Sortez des images de Image.xcassets et ajoutez-les à nouveau au projet. Cela a fonctionné pour moi. 

6
Trinh Tran

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

Je le répare par:

  • Supprimer les données de conduite

  • Nettoyer le projet 

  • Redémarrer Xcode 

  • Supprimer le projet de mon appareil

  • Redémarrez les 5s. 

Je pense que Xcode utilise mal la mémoire, le système peut allouer un peu de mémoire pour Xcode car Xcode n'a pas pu dessiner l'image du déjeuner (sur mon ordinateur, Xcode fonctionne depuis plusieurs semaines sans se fermer)

5
guozqzzu

ça a fonctionné pour moi.

D'abord dans xcode clean de project.

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

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

4
oscar castellon

J'ai également eu ce problème 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 surlignée dans la vue image sur la même image dans mes images.xcassets.

4
bonnie lapin

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

4
Sunly

Sélectionnez ImageView, puis supprimez l'extension de l'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.

3
Asha Antony

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

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

2
Amon

Dans mon cas, c’était le nom de l’image .
J'ai ajouté une image nommée [email protected] à LaunchScreen.xib - l'un de mes anciens écrans de lancement uniquement à des fins de test. Je construisais sur le simulateur iPhone X, 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 le @2x faisait partie du problème, ainsi que le -568h. Ce qui a du sens sur un périphérique -812h@3x.

2
de.

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

 enter image description here

2
SwiftDeveloper

La solution consiste simplement à utiliser JPG au lieu de PNG.

2
KING

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

2
midhun p

Redémarrer Xcode l’a fait pour moi.

Qu'est-ce que not a fait:

  • Dossier de construction propre
  • Redémarrez l'appareil ou le simulateur (l'image n'était visible sur aucun des deux)
2
Manuel

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
JamieDass

J'ai le même problème avec imageView un storyboard é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
ostap_holub

Vous pouvez aussi 1. supprimer une image de projet 2. changer le nom de l'image 3. ajouter une image de fichier au projet

Cela a fonctionné pour moi.

1
Jesse

Je vis la même chose. Je change la résolution de l’image de 300 pixels/pouce, change le à 72. Cela fonctionne pour moi.

1
Tim Le

Résolu!

La seule chose qui a fonctionné pour moi a été de supprimer la ViewController de LaunchScreen.storyboard et de créer un nouveau ViewController défini sur 

Est le contrôleur de vue initiale

Aussi simple que cela :)

Suivant m'a aidé à:

  • changer "Launch Screen File" en un autre xib
  • lancer l'application
  • changer xib retour

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

1
Vladimir Tolstikov

Le nom de l’image pose problème ..__ Renommez le nom de l’image utilisée dans le storyboard de l’écran de démarrage . Assurez-vous de ne pas utiliser de caractère autre que alphanumérique (n’utilisez pas "_- & @") moi comme un charme ..

1
Aproram

J'ai aussi rencontré ce problème. Effacer tout le contenu et les paramètres de SIMULATOR a fonctionné pour moi.

0
skyecloude

Dans mon cas, je viens d'aller à l'application CIBLES -> Général -> Icônes d'application et images de lancement -> Lancer la source d'images Ensuite, sélectionnez la source où je mets les images J'espère que cela vous aidera

0
Hoang Quan

Pour moi, le problème était que la taille de mon Launchscreen était désactivée de 1 pixel (2209x1242 au lieu de 2208x1242). La corriger, puis redémarrer l'appareil et reconstruire l'application ont aidé.

0
gklka

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 placez-y vos images.

4 - Sauvegarder 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 qu'il était impossible de l'enregistrer ou qu'un processus de mise en cache étrange le bloque.

0
Fox5150

"myProject" contient de nombreuses images créées à partir d'images.xcassets. Mais j'ai couru dans les images manquantes après la suppression et la restauration de «Assets.xcasset» du projet. 

  1. Supprimer Images.xcassets accidentellement, mais 
  2. Ajout d'images.xcassets à "myProject" 

J'ai rencontré ce problème d'images manquantes et j'ai essayé les méthodes suivantes: 

  1. Recycler l’alimentation de l’appareil, mais cela ne fonctionne pas. 
  2. Utiliser Xcode pour "construire" un projet après "nettoyage", et cela ne fonctionne pas non plus. 

Solution pour résoudre mon problème: 

  1. Chaque image ajoutée dans Images.x est ajoutée à "myProject" via Xcode dans "Adhésion à la cible" dans "Afficher dans l'inspecteur de fichier". 
0
Wang3t

Sélectionnez votre fichier image dans le menu de gauche, sélectionnez "Afficher l'inspecteur de fichier" dans le menu de droite Utilitaires. Sous l'appartenance à la cible, assurez-vous que votre cible est sélectionnée. J'ai ajouté l'image en sélectionnant la cible, mais je ne sais pas pourquoi elle a été désélectionnée. J'ai essayé toutes les solutions, en redémarrant, en supprimant etc. Personne ne fonctionne. Juste cela a fonctionné. J'espère que ça aide quelqu'un d'autre.

0
nfinfu