UIImage Ver imágenes faltantes en la pantalla de inicio en el dispositivo


301

Tengo una aplicación que admite iOS8 y posterior, integrada en Xcode 7 y estoy usando una XIB para una pantalla de inicio (no tengo imágenes de inicio). La vista contiene un solo UILabel con la versión de la aplicación y 2 UIImageViews con imágenes que están presentes en Images.xcassets: un logotipo y una imagen de bienvenida.

El UILabel y la imagen del logotipo aparecen correctamente cuando inicio la aplicación, pero la imagen de bienvenida no aparece si ejecuto la aplicación en un iPad Air 2 con iOS9. He probado en un Air y un Mini con iOS8 y simuladores iOS9 para iPad 2, iPad Air y iPad Air 2 y la imagen aparece correctamente en todos ellos.

Ejecuté algunos problemas básicos de solución de problemas para ver si podía descubrir qué estaba sucediendo, pero no he podido resolverlo y la única diferencia que puedo ver entre la imagen que funciona y la que falla es cuando la agregué a la bienes...

Aquí hay un resumen de lo que sé:

  • El UIImageView para la imagen de bienvenida está en el lugar correcto, en el tamaño correcto. Puedo decir esto porque configuré su color de fondo en verde solo para asegurarme. La vista está ahí, pero la imagen no aparece. Así que supongo que la vista no tiene la culpa.

  • Al configurar UIImageView para que la imagen de bienvenida también use la imagen del logotipo, la imagen del logotipo aparece en el lugar correcto para la vista. Esto también me lleva a suponer que la vista no tiene la culpa.

  • El UIImage que estoy usando en la vista de imagen de bienvenida se usa en otra parte de la aplicación y aparece bien en esas otras vistas (la imagen del logotipo también se usa en otra parte de la aplicación y parece estar bien). Así que supongo que la imagen es válida y que aparezca en otras vistas no es un problema.

  • He confirmado que la configuración de UIImages para el logotipo y la presentación en el archivo xcassets es la misma. Están configurados en Universal, Cualquier ancho y alto, múltiples factores de escala, representados por defecto. Hay una diferencia: el logotipo tiene escalas 1x, 2x y 3x, mientras que la imagen de inicio solo tiene 1x y 2x, pero también he intentado usar UIImages con solo valores 1x, y 1x y 2x en UIView y funcionan (si fueran agregado al proyecto hace algún tiempo).

  • Agregar otra imagen de un tamaño o formato diferente (PNG y JPG) a mis xcassets y usar ese UIImage en UIImageView para la imagen de bienvenida también no se muestra.

  • Al agregar otro UIImageView al archivo XIB y asignarle un UIImage que ya estaba en los trabajos de xcassets, la imagen aparece en la pantalla de carga.

  • Copiar y renombrar los archivos de imagen utilizados para el logotipo y agregarlos al proyecto y luego usar ese UIImage en la vista de bienvenida tampoco se muestra.

  • Intenté limpiar el proyecto, reiniciar la máquina de desarrollo y eliminar la aplicación del Air 2 y volver a instalarla por si eso fuera un problema.

Estos últimos tres pasos me llevan a creer que hay algún problema con las imágenes agregadas después de un cierto punto en la vida del archivo del proyecto. Mientras actualicé a Xcode 7 ayer, la imagen de bienvenida se agregó originalmente en Xcode 6, pero la imagen del logotipo (también agregada en Xcode 6) se agregó algunos meses antes.

He revisado los archivos json en busca de la imagen del logotipo y la imagen de bienvenida y parecen tener el mismo formato. También he rastreado el archivo pbxproj buscando diferencias y no puedo ver ninguna.

Entonces, me preguntaba si alguien tenía alguna idea de por qué la pantalla de inicio podría no mostrar estas nuevas imágenes que estoy agregando específicamente en el Air 2. Otras preguntas que he estado leyendo relacionadas con las imágenes que no aparecen parecen relacionarse ya sea con Imágenes de lanzamiento o con imágenes en archivos XIB que tienen clases asociadas, ninguna de las cuales parece relevante aquí.


1
Tenía la intención de responder sobre esto: volví y leí las respuestas proporcionadas, luego volví a Xcode y volví a agregar el UIImageView y la imagen para probarlos. Esta vez, funcionó sin ningún cambio. No tengo idea de por qué: la misma versión de Xcode, reinicié, reconstruí, limpié y eliminé la aplicación antes, el mismo iOS, el mismo Mac OS, simplemente funcionó. Así que desafortunadamente no he podido verificar si alguna de las soluciones hubiera ayudado.
MFW

Para mí, NINGUNA de las respuestas proporcionadas resolvió el problema. Simulator, iPhone 5, iPhone 5 SE, iPad 4 muestran correctamente el UIImageView dentro de mi LaunchScreen.xib, iPad Air 2 no lo mostrará. Reinició todos los dispositivos, reinstaló en todos los dispositivos. El comportamiento permanece.
Christian

Oye, deberías aceptar la respuesta votada más de 130.
Khanh Nguyen

Estoy de acuerdo con Khanh, ¡está funcionando para la mayoría!
gunjot singh

@MFW, ¡ACEPTA LA RESPUESTA FFS! IM INFORMANDO U A LA POLICÍA.
GeneCode

Respuestas:


476

Apague y luego vuelva a encender.

En serio, reinicie el dispositivo, eso es lo que me solucionó.

Esto es lo que no funcionó:

  • Limpieza de datos derivados
  • Limpieza del proyecto
  • Desinstalar la aplicación del dispositivo
  • Reiniciar Xcode
  • Reiniciar la computadora

Observaciones anteriores:

Al igual que los demás, esto:

  • Funciona bien en el simulador
  • Solía ​​funcionar en los dispositivos (iPhone 5S, iPad Air)
  • No hay cambios de código (verificado a través de git reset --hard HEAD), pero dejó de funcionar.

Lo que recuerdo al desencadenar la primera compilación donde dejó de funcionar fue desconectar el iPhone mientras se estaba ejecutando. (No estoy seguro si está relacionado)

Sin embargo, el restablecimiento de git que no lo soluciona (combinado con todos los pasos de limpieza que no funcionan) me dice que esto debe estar almacenado en caché en otro lugar. ¿Posiblemente en uno de los archivos .gitignored? (Estoy usando el archivo de ignorar Git para proyectos de Xcode )

Una solución alternativa que funcionó para un UIImageView (en la UIView que tiene tres) pero no para los demás fue poner la imagen en un archivo .xcassets. Volver al archivo de imagen simple no deshace la corrección. (Realmente se siente como un error de almacenamiento en caché).

ACTUALIZACIÓN: Ver arriba: reiniciar el dispositivo es lo que lo solucionó. Tengo la sensación de que los datos de mapa de bits incorrectos se almacenan en caché en el propio dispositivo.

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


31
Simplemente reiniciar el simulador lo hizo por mí. ¡Loco!
FractalDoctor

1
¡Gracias! Esto también me lo arregló.
CodenameDuchess

66
¿Crees que los usuarios de la App Store experimentarán el mismo problema?
Adam Waite

1
@danielstorm nunca se descubrió que era honesto
Adam Waite

2
Qué bicho retrasado, gg apple. Reorganizar mi teléfono funcionó para mí, gracias.
Jacob King

151

"La solución para mí fue simplemente asegurarme de que la casilla" Limpiar el contexto gráfico "no esté marcada para el UIImageView en el guión gráfico. Simplemente cambiar esto me lo arregló". Ninguna otra solución funcionó para mí. Lo obtuve del foro de desarrolladores de Apple

ingrese la descripción de la imagen aquí


2
Maldición, nunca hubiera pensado probar esto. Arregla el simulador y el dispositivo con Xcode 7.3.1 (7D1014) y iOS 9.3.2 Developer Beta 3.
Trepatroncos

3
Puedo confirmar que esto también funcionó para mí. Xcode 7.3 y iOS 9.3.2.
Torbjørn Kristoffersen

1
Incluso con la mía ya marcada, ¡desmarcar y volver a verificar funcionó!
lonesomewhistle

1
Agradable +1 para su respuesta, también funciona en Xcode 8 y iOS 10
Skovie

1
Esta es la respuesta correcta. Probado en iOS 11, en dispositivo.
jberlana

99

Tuve exactamente el mismo problema en un iPhone 6.

El hecho muy extraño es que pude usar otra imagen de mis imágenes.xcassets que tenían el mismo tamaño, compresión, espacio de color ...

No puedo encontrar por qué no funciona, pero encontré una solución: simplemente coloque su archivo fuera de sus images.xcassets y use su nombre completo (con extensión) en Interface Builder

splashScreen en la muestra del guión gráfico

Espero que esto ayude !


1
Eso fue lo primero que probé, pero no me funciona.
Paul Slocum

Esto funcionó para mí; Gracias. Ojalá supiera por qué solo funcionaba para algunas imágenes en archivos xcassets ...
Christopher King

Para empezar, esto funciona para mí, pero ahora las propiedades de imagen o etiqueta no se actualizan en absoluto. Incluso después de una acción limpia del producto. Presentó un error aquí: bugreport.apple.com
Philip Borges

Reiniciar el iPhone 6s después de eliminar la aplicación hizo el trabajo. Antes de eso, la solución NikLanf a continuación "borra el contexto gráfico" también se verificó.
Matthew Ferguson el

Esto funciona. La razón es que creo que debido a .xcasset todavía no se carga cuando se muestra la pantalla de inicio. Si lo piensa, para eso está la pantalla de inicio: un tiempo de espera para que ios cargue el contenido de la aplicación, que incluye xcasset. Supongo que ponerlo fuera funciona ya que todo en la carpeta raíz de la aplicación se cargará primero.
GeneCode

33

La siguiente secuencia de operaciones me solucionó el problema en Xcode 7.3.1 y iOS 9.3.4:

  1. Limpia tu construcción (⌘ + ⇧ + K)
  2. Cerrar Xcode
  3. Dispositivo iOS con restablecimiento completo (reinicio del botón de encendido + inicio)
  4. Reinicie Xcode: deje que la indexación termine y se desarrolle en el dispositivo una vez que esté listo.

Me salvó el día! ¡Gracias!
Zack Zhu el

Trabajó. No hice los pasos 2 y 4, tal vez solo se necesita un restablecimiento completo del dispositivo iOS, ¿alguien puede confirmar esto?
Timothy LJ Stewart

@ TimothyL.J.Stewart Los pasos 2 y 4 fueron solo pasos más de precaución que había tomado porque el problema era bastante molesto para mí, por lo que era solo para estar seguro. Creo que tiene razón al decir que podrían ser innecesarios, ya que realmente no afectan (típicamente) a la compilación.
mayankk2308

Xcode 8 Swift 3.0 El apagado o restablecimiento completo es lo único que funciona cada vez, y debe hacerse cada vez que se agrega un nuevo activo. Eliminar DerivedData no lo hace. Sin embargo, la imagen funciona correctamente en el simulador. Esto ha desperdiciado gran parte de mi tiempo, gracias @MayankKumar por la solución.
Timothy LJ Stewart


27

Muchas otras respuestas sugieren que reiniciar dispositivos y / o reconstruir y / o reinstalar es la solución.

Si bien estas respuestas funcionan para algunos de nosotros, la razón por la que funcionan es porque la aplicación se ve obligada a "volver a tomar" o "reconstruir" las instantáneas en caché.

Las aplicaciones usan las instantáneas almacenadas en caché para presentar imágenes antes de que los datos de soporte se carguen en la memoria, incluido el catálogo de activos que contiene imágenes del guión gráfico.

Esta respuesta SO de @jaga proporciona la solución, pero no la razón, de por qué faltan UIImageViews en la pantalla de inicio del dispositivo (pero no en el simulador).

Antecedentes

Recientemente intenté usar una fuente personalizada en mi archivo "Launch Screen.storyboard".

La razón por la que no pude aclararme después de leer esta respuesta SO de @TimCamber, lo que me llevó a investigar un poco más y probar.

El motivo por el que no se incluye una fuente personalizada en mi archivo Launch Screen Storyboard es el mismo motivo por el que no se incluye una imagen dentro de un catálogo de activos ...

La aplicación prepara instantáneas verticales y horizontales de la pantalla de inicio de la aplicación a partir del archivo Storyboard de la pantalla de inicio y (actualmente) la guarda en el paquete de la aplicación aquí:

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

Este proceso se completa antes de que se carguen los archivos de soporte, incluidas las fuentes personalizadas y el catálogo de activos.

Solución

Como se mencionó anteriormente siguiendo la solución de @ jaga, literalmente todo lo que se requiere es:

  1. (vieja escuela) agregue un archivo de imagen (.PNG) al paquete de su aplicación (como puede ver en la captura de pantalla a continuación, agregué el archivo de imagen en el subdirectorio Archivos de Soporte en un subdirectorio de Imágenes), y

captura de pantalla de directorios relevantes en Project Navigator en Xcode

  1. haga referencia a esa imagen en su objeto UIImageView en el archivo Launch Screen Storyboard ...

captura de pantalla de la sección Vista de imagen para UIImageView en Inspector de atributos en Xcode


Gracias, he estado luchando con esto por un tiempo. Funciona para mi.
James Laurenstin

Trabajó para mí directamente. esta debería ser la respuesta correcta
Mohammad Shraim

En el lanzamiento, IOS no pudo compilar activos, por lo que colocar su imagen para agrupar funciona. Gracias.
icould

La mejor respuesta hasta ahora. Agregaré esto: la imagen debe estar en el directorio raíz del paquete de la aplicación. De lo contrario, debe proporcionar la ruta completa "Media / launch_v1_200_mod.png" si almacena imágenes en un subdirectorio.
MoVod

1
Yo hice lo mismo. Mi aplicación ya está activa, pero el problema es que a veces muestra la imagen y a veces muestra un cuadrado con color blanco en el centro de la pantalla
Punit

21

Estaba viendo el mismo problema. Reiniciar el dispositivo (iPhone 6) y reconstruir la aplicación en el dispositivo es lo único que lo solucionó. Intenté muchos otros consejos y sugerencias, pero nada más funcionó. Solo reiniciar + reconstruir ayudó.


¿Cómo será si el usuario actualiza la aplicación desde la AppStore? ¿Tendrá que reiniciar su dispositivo?
kokos8998

17

Mi solución @iOS 11.x:

  • Use la .jpgimagen en lugar de .png. Creo que el tamaño del archivo de imagen es importante;
  • (Opcionalmente) Ponga el archivo de imagen en el directorio del proyecto en lugar de .xcassets;

3
Poner el archivo de imagen fuera de .xcassetsayudado
Husam

@Husam Realmente creo que el tamaño del archivo es lo único que importa. Tengo una pantalla de inicio con dos imágenes: una grande (400 + KB .png) y un logotipo (10 + KB .png, dentro de .xcassets). El logotipo siempre aparece normalmente, pero el grande no.
Ke Yang

Tienes razón ... Después de mi comentario, el problema apareció nuevamente después de agregar otra imagen. Gracias por su ayuda
Husam

2
Luego seguí tus instrucciones usando la imagen jpg y trabajé
Husam

¿Qué pasa si necesitas transparencia?
JCutting8

16

Tenía lo mismo para la aplicación instalada desde TestFlight. Eliminar aplicación -> luego reiniciar iPhone -> luego reinstalar la aplicación funciona para mí. Simplemente reinstalar la aplicación o simplemente reiniciar el dispositivo no ayudó.


Esto es lo único que funcionó para mí, ¡ojalá lo hubiera visto hace 90 minutos!
KML

desearía haber visto esto hace 4 horas
gerry.liang

También funcionó para mí, pero el problema es extraño: |
Nishu_Priya

8

Estaba teniendo el mismo problema, pero reiniciar el dispositivo no ayudó. Lo que funcionó para mí fue eliminar el UIImageView de mi guión gráfico de lanzamiento y agregar uno nuevo.



7

Lo que funcionó para mí fue seleccionar Restablecer contenido y configuración ... del menú Simulador

Restablecer contenido y menú de configuración


6

Saque imágenes de Image.xcassets y agréguelas nuevamente al proyecto. Funcionó para mi.


Eso funciona solo porque está obligando a la aplicación a recrear las instantáneas de la pantalla de inicio, pero no es una solución o razón para el problema.
andrewbuilder

6

Elimine la aplicación del dispositivo móvil y luego reinicie el dispositivo e instale la aplicación nuevamente. ahora se resolverán los problemas


5

Yo uso el dispositivo iPhone 5s, también encuentro este problema.

Lo arreglo por:

  • Eliminar datos de la unidad

  • Limpiar el proyecto

  • Reiniciar Xcode

  • Eliminar el proyecto de mi dispositivo

  • Reinicia los 5s.

Creo que es algo incorrecto de Xcode usar memoria, el sistema puede asignar un poco de memoria para Xcode porque Xcode ha fallado al dibujar la imagen del almuerzo (en mi computadora, Xcode ha funcionado durante varias semanas sin cerrar)


No lo sé, pero funcionó ... como bien. Gracias hombre por compartir.
Arpit B Parekh

4

También tuve este problema exacto en Xcode 7 con dispositivos iPad y iPhone. Aunque no tiene sentido, pude evitarlo la mayor parte del tiempo configurando no solo la Imagen sino también la Imagen resaltada en la vista de imagen a la misma imagen en mis imágenes.


Parece ser ayudado para mí también
rafalkitta

4

Creo que launchscreen solo admite imágenes en Assets.xcassets.


Intenté todas las respuestas anteriores y ninguna funcionó para mí. Pero esta respuesta resolvió el problema.
Ercan Celik

4

Me ha funcionado.

Primero en xcode clean de project.

Si usa el simulador, elimine la aplicación y reinicie.

Si usa un dispositivo, elimine la aplicación y reinicie el dispositivo.


3

Reiniciar Xcode lo hizo por mí.

Lo que no lo hizo:

  • Carpeta de compilación limpia
  • Reinicie el dispositivo o simulador (la imagen tampoco era visible)

3

Seleccione ImageView y luego elimine la extensión de imagen (.png o .jpg) en la pestaña del inspector de atributos> Vista de imagen> Imagen> Nombre de imagen.

En launchscreen.storyboard, la imagen no aparecerá, pero estará allí en el dispositivo. Esto funcionó para mí.


Este fue mi problema también. Extrañamente funcionó al azar en algunos dispositivos. Xamarin-Project con Xcode 9.4 para la edición XIB / Storyboard ...
fl034

2

Parecía un error de iOS. Como a veces la animación del sistema desapareció.

Ahora solo reinicio el iPhone y me ha funcionado.


2

En mi caso, era el nombre de la imagen . Agregué
una imagen llamada Default-568h@2x.pnga LaunchScreen.xib, una de mis antiguas pantallas de inicio solo para fines de prueba. Estaba construyendo en el iPhone X Simulator, la imagen no apareció.

Cambiar el nombre a algo neutral (MyImage.png) resolvió el problema.

Parece que @2xfue parte del problema, así como el -568h. Lo que tiene sentido en un -812h@3xdispositivo.


2

Esto es demasiado importante ¡ Debe estar vacío !Launch Screen File

ingrese la descripción de la imagen aquí


8
Está usando el guión gráfico XIB para el lanzamiento, esta respuesta no funcionará.
Benck

2

La solución simple es usar JPG en lugar de PNG.


JPEG no admite transparencia.
JCutting8

1

Tengo el mismo problema con imageView, un guión gráfico de pantalla de inicio. Eliminé la referencia de la imagen del proyecto, cambié el nombre de mi imagen y la agregué nuevamente al proyecto. Todo funciona a la perfección.


1

También puede 1. eliminar la imagen del proyecto 2. cambiar el nombre de la imagen 3. agregar la imagen del archivo al proyecto

Funcionó para mi.


1

Tuve este problema en iOS 10 en un iPhone 6 y también en el simulador. Mi imagen estaba en una carpeta y ese parecía ser el problema. Eliminé la imagen de la carpeta en Xcode y la puse en el directorio base del proyecto que resolvió el problema.


1

Yo experimento lo mismo. Cambio la resolución de la imagen de 300 píxeles / pulgada, la cambio a 72. Funciona para mí.


1

Siguiente me ayudó:

  • cambiar "Iniciar archivo de pantalla" a otro xib
  • ejecuta la aplicación
  • cambiar xib de nuevo

También es muy importante : verifique que su xib no esté abierto en otra pestaña, ¡eso también puede causarlo!


1

Encontré una solución simple pero radical que funcionó para mí:

1 - Eliminar el archivo: LaunchScreen.storyboard y moverlo a la papelera.

2 - Producto -> Limpio

3 - Cree un nuevo archivo de pantalla de inicio llamado: LaunchScreen.storyboard y coloque sus imágenes en él

4 - Guardar y construir

Eso funcionó para mí después de probar métodos complejos durante horas ... Parece que mi LaunchScreen.storyboard estaba bloqueado contra escritura y no se podía guardar o un proceso de almacenamiento en caché extraño lo estaba bloqueando.


1

El nombre de la imagen es el problema. Cambie el nombre de la imagen utilizada dentro del guión gráfico de la pantalla de inicio. Asegúrate de no usar ningún otro carácter que no sea alfanumérico (no uses "_- & @") Me funcionó como un encanto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.