UIImageView imagens ausentes na tela Iniciar no dispositivo

301

Eu tenho um aplicativo compatível com iOS8 e posterior, embutido no Xcode 7 e estou usando um XIB para uma tela de inicialização (não tenho imagens de inicialização). A exibição contém um único UILabel com a versão do aplicativo e 2 UIImageViews com imagens que estão presentes em Images.xcassets: um logotipo e uma imagem inicial.

O UILabel e a imagem do logotipo aparecem corretamente quando inicio o aplicativo, mas a imagem inicial não aparece se eu executar o aplicativo em um iPad Air 2 com iOS9. Testei em simuladores Air e Mini executando iOS8 e iOS9 para iPad 2, iPad Air e iPad Air 2 e a imagem aparece corretamente em todos eles.

Executei uma solução básica de problemas para descobrir se eu conseguia descobrir o que está acontecendo, mas não consegui resolvê-la e a única diferença que posso ver entre a imagem que está funcionando e a que está falhando é quando a adicionei ao ativos...

Aqui está um resumo do que eu sei:

  • O UIImageView da imagem inicial está no local correto, no tamanho correto. Percebo isso porque defino a cor de fundo para verde apenas para garantir. A vista está lá, mas a imagem não aparece. Portanto, estou assumindo que a visão não é a culpada.

  • Definir o UIImageView para a imagem inicial também usar a imagem do logotipo faz com que a imagem do logotipo apareça no local correto para a exibição. Isso também me leva a supor que a visão não tem culpa.

  • A UIImage que estou usando na exibição da imagem inicial é usada em outros lugares do aplicativo e aparece bem nessas outras exibições (a imagem do logotipo também é usada em outros lugares no aplicativo e aparece bem). Portanto, estou assumindo que a imagem é válida e que ela apareça em outras visualizações não é um problema.

  • Confirmei que as configurações do UIImages para o logotipo e o splash no arquivo xcassets são as mesmas. Eles são definidos como Universal, Qualquer largura e altura, vários fatores de escala, renderizados como padrão. Há uma diferença - o logotipo tem escalas de 1x, 2x e 3x, enquanto a imagem inicial tem apenas 1x e 2x, mas também tentei usar o UIImages com apenas valores de 1x e 1x e 2x no UIView e eles funcionam (se eles forem adicionado ao projeto há algum tempo).

  • A adição de outra imagem de tamanho ou formato diferente (PNG e JPG) aos meus xcassets e o uso da UIImage no UIImageView para a imagem inicial também não são exibidos.

  • Adicionando outra UIImageView ao arquivo XIB e alocando uma UIImage que já estava no xcassets funciona, a imagem aparece na tela de carregamento.

  • Copiar e renomear os arquivos de imagem usados ​​para o logotipo e adicioná-los ao projeto e, em seguida, usar essa UIImage na exibição inicial também não são exibidos.

  • Tentei limpar o projeto, reiniciar a máquina de desenvolvimento e excluir o aplicativo do Air 2 e reinstalá-lo apenas no caso de um problema.

Essas três últimas etapas me levam a acreditar que há um problema com as imagens adicionadas após um certo ponto na vida útil do arquivo do projeto. Enquanto eu atualizei para o Xcode 7 ontem, a imagem inicial foi adicionada originalmente no Xcode 6, mas a imagem do logotipo (também adicionada no Xcode 6) foi adicionada alguns meses antes.

Procurei nos arquivos json a imagem do logotipo e a imagem inicial e eles parecem ter o mesmo formato. Eu também vasculhei o arquivo pbxproj procurando diferenças e não consigo ver nenhuma.

Então, eu queria saber se alguém tem alguma idéia de por que a tela de lançamento pode não exibir essas novas imagens que estou adicionando especificamente ao Air 2? Outras perguntas que tenho lido relacionadas a imagens que não aparecem parecem estar relacionadas a Iniciar imagens ou a imagens em arquivos XIB que possuem classes associadas, nenhuma das quais parece relevante aqui.

MFW
fonte
1
Estive querendo responder a isso - voltei e li as respostas fornecidas, depois retornei ao Xcode e rededitei o UIImageView e a imagem para testá-las. Desta vez, funcionou sem nenhuma alteração. Não sei por que - a mesma versão do Xcode, reiniciei, reconstruí, limpei e removi o aplicativo antes, mesmo iOS, mesmo Mac OS, funcionou. Infelizmente, não consegui verificar se alguma das soluções teria ajudado.
MFW 14/10
Para mim, nenhuma das respostas fornecidas resolveu o problema. Simulador, iPhone 5, iPhone 5 SE, iPad 4 estão todos exibindo o UIImageView no meu LaunchScreen.xib corretamente, o iPad Air 2 não o mostrará. Reiniciou todos os dispositivos, reinstalou em todos os dispositivos. O comportamento permanece.
Christian
Ei, você deve aceitar a resposta com mais de 130 votos.
Khanh Nguyen
Eu concordo com Khanh, está trabalhando para a maioria !!
gunjot singh
@ MFW, ACEITE A RESPOSTA FFS! IM RELATANDO U AO COPS.
GeneCode

Respostas:

475

Desligue e, em seguida, ligue novamente.

Sério, reinicie o dispositivo - foi o que o corrigiu para mim.

Aqui está o que não funcionou:

  • Limpeza DerivedData
  • Limpando o projeto
  • Desinstalando o aplicativo do dispositivo
  • Reiniciando o Xcode
  • Reiniciando o computador

Observações mais antigas:

Assim como os outros, ele:

  • Funciona bem no simulador
  • Usado para trabalhar nos dispositivos (iPhone 5S, iPad Air)
  • Nenhuma alteração de código (verificada via git reset --hard HEAD), ainda parou de funcionar.

O que eu lembro de ter acionado a primeira versão em que parou de funcionar foi desconectar o iPhone enquanto ele estava funcionando. (Não tenho certeza se está relacionado.)

No entanto, o git reset não corrigi-lo (combinado com todas as etapas limpas que não estão funcionando) me diz que isso deve estar ficando em cache em outro lugar. Muito possivelmente em um dos arquivos .gitignored? (Estou usando o arquivo ignorar Git para projetos Xcode )

Uma solução alternativa que funcionava para um UIImageView (no UIView que possui três), mas não para os outros, estava colocando a imagem em um arquivo .xcassets. A reversão para o arquivo de imagem simples não desfez a correção. (Realmente parece um erro de armazenamento em cache).

ATUALIZAÇÃO: Veja na parte superior - reiniciar o dispositivo é o que o corrigiu. Sinto que os dados de bitmap incorretos estão sendo armazenados em cache no próprio dispositivo.

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

Aral Balkan
fonte
31
Simplesmente reiniciar o simulador fez isso por mim. Louco!
FractalDoctor
1
Obrigado! Isso corrigiu para mim também.
CodenameDuchess
6
Você acha que os usuários da App Store terão o mesmo problema?
Adam Waite
1
@danielstorm nunca descobriu para ser honesto
Adam Waite
2
Que bug retardado, gg maçã. Reiniciar meu telefone funcionou para mim, obrigado.
Jacob rei
151

"A solução para mim foi simplesmente garantir que a caixa" Limpa o contexto de gráficos "esteja desmarcada para o UIImageView no storyboard. Basta alterar isso para corrigi-lo." Nenhuma outra solução funcionou para mim. Entendi no fórum de desenvolvedores da apple

insira a descrição da imagem aqui

NikLanf
fonte
2
Porra, eu nunca teria pensado em tentar isso. Correções Simulator e dispositivos com o Xcode 7.3.1 (7D1014) e iOS 9.3.2 desenvolvedor Beta 3.
Nuthatch
3
Posso confirmar que isso também funcionou para mim. Xcode 7.3 e iOS 9.3.2.
Torbjørn Kristoffersen
1
Mesmo com o meu já marcado - desmarcar e verificar novamente fez o truque!
Loneomewhistle
1
Agradável +1 pela sua resposta, funciona no Xcode 8 e iOS 10 bem
Skovie
1
Essa é a resposta correta. Fornecido no iOS 11, no dispositivo.
jberlana
99

Eu tive exatamente o mesmo problema em um iPhone 6.

O fato muito estranho é que eu era capaz de usar outra imagem das minhas images.xcassets que tinham o mesmo tamanho, compressão, espaço de cores ...

Não consigo descobrir por que ele não funciona, mas encontrei uma solução: basta colocar seu arquivo fora do seu images.xcassets e usar seu nome completo (com extensão) no Interface Builder

splashScreen na amostra de storyboard

Espero que esta ajuda!

gbitaudeau
fonte
1
Essa foi a primeira coisa que tentei, mas não funciona para mim.
Paul Slocum
Isso funcionou para mim; obrigado. Eu gostaria de saber por que ele só estava trabalhando para algumas imagens em xcassets arquivos embora ...
Christopher King
Isso funciona para mim, para começar, mas agora as propriedades da imagem ou do rótulo não são atualizadas. Mesmo após uma ação limpa do produto. Arquivado um bug aqui: bugreport.apple.com
Philip Borges
Reiniciar o iPhone 6s após a exclusão do aplicativo fez o trabalho. Antes dessa solução NikLanf abaixo, "limpa o contexto gráfico", também era verificado.
Matthew Ferguson
Isso funciona. A razão é que acho que devido ao .xcasset ainda não está carregado quando a tela de inicialização é exibida. Se você pensar bem, é para isso que serve a tela de inicialização - um tempo de espera para o ios carregar o conteúdo do aplicativo, que inclui o xcasset. Meu palpite é colocá-lo fora do trabalho, pois tudo na pasta raiz do aplicativo será carregado primeiro.
GeneCode 01/04
33

A seguinte sequência de operações corrigiu o problema para mim no Xcode 7.3.1 e iOS 9.3.4:

  1. Limpe sua compilação (⌘ + ⇧ + K)
  2. Fechar Xcode
  3. Dispositivo iOS de reinicialização total (reinicialização do botão Power + Home)
  4. Reinicie o Xcode - deixe a indexação terminar e criar no dispositivo assim que estiver pronto.
mayankk2308
fonte
Salvou o meu dia! Obrigado!
Zack Zhu
Trabalhou. Não executei as etapas 2 e 4. Talvez apenas seja necessária uma reinicialização total do dispositivo iOS. Alguém pode confirmar isso?
Timothy LJ Stewart
@ TimothyL.J.Stewart Os passos 2 e 4 foram apenas mais medidas de precaução que eu havia tomado porque o problema era um incômodo para mim - então era só para ter certeza. Eu acho que você está certo ao dizer que eles podem ser desnecessários, pois não afetam (geralmente) a compilação.
mayankk2308
Xcode 8 Swift 3.0 Desligar ou redefinir o hardware é a única coisa que funciona sempre e deve ser feita sempre que um novo ativo é adicionado. A exclusão de DerivedData não. No entanto, a imagem funciona corretamente no simulador. Isso desperdiçou muito do meu tempo, obrigado @MayankKumar pela solução.
Timothy LJ Stewart
Funcionou como um encanto
lborgav
27

Muitas outras respostas sugerem a reinicialização de dispositivos e / ou a reconstrução e / ou reinstalação da solução.

Embora essas respostas funcionem para alguns de nós, o motivo é que o aplicativo é forçado a "refazer" ou "reconstruir" os snapshots em cache.

As capturas instantâneas em cache são usadas pelos aplicativos para apresentar imagens antes que os dados de suporte sejam carregados na memória, incluindo o catálogo de ativos que contém imagens do storyboard.

Essa resposta do SO por @jaga fornece a solução, mas não o motivo, porque o UIImageViews está ausente na tela de inicialização no dispositivo (mas não no simulador).

fundo

Recentemente, tentei usar uma fonte personalizada no meu arquivo "Launch Screen.storyboard".

O motivo pelo qual eu não pude ficar claro depois de ler esta resposta do SO da @ TimCamber, que me levou a fazer um pouco mais de pesquisa e teste.

O motivo pelo qual uma fonte personalizada não está incluída no meu arquivo Launch Screen Storyboard é o mesmo motivo pelo qual uma imagem em um catálogo de ativos não está incluída ...

O aplicativo prepara instantâneos retrato e paisagem da tela de inicialização do aplicativo a partir do arquivo Storyboard do Launch Screen e (atualmente) o salva no pacote de aplicativos aqui:

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

Esse processo é concluído antes do carregamento de qualquer arquivo de suporte, incluindo fontes personalizadas e o catálogo de ativos.

Solução

Como mencionado acima, seguindo a solução da @ jaga, literalmente tudo o que é necessário é:

  1. (old school) adicione um arquivo de imagem (.PNG) ao pacote do seu aplicativo (como você pode ver na captura de tela abaixo, adicionei o arquivo de imagem no subdiretório Supporting Files em um subdiretório Images) e

captura de tela dos diretórios relevantes no Project Navigator no Xcode

  1. referencie essa imagem no seu objeto UIImageView no arquivo Launch Screen Storyboard ...

captura de tela da seção Image View para UIImageView no Attributes Inspector no Xcode

andrewbuilder
fonte
Obrigado, eu tenho lutado com isso por um tempo. Isso funciona para mim.
James Laurenstin
trabalhou para mim diretamente. essa deve ser a resposta correta
Mohammad Shraim
No lançamento, o IOS não conseguiu compilar ativos, portanto, colocar sua imagem para agrupar as obras. Obrigado.
Icould
Melhor resposta até agora. Acrescentarei o seguinte: a imagem deve estar no diretório raiz do pacote de aplicativos. Caso contrário, você deve fornecer o caminho completo "Media / launch_v1_200_mod.png" se você armazenar imagens em um subdiretório.
MoVod
1
Eu fiz o mesmo. Meu aplicativo já está ativo, mas o problema é que algumas vezes mostra a imagem e outras mostra quadrado com a cor branca no meio da tela
Punit
21

Eu estava vendo o mesmo problema. Reiniciar o dispositivo (iPhone 6) e reconstruir o aplicativo no dispositivo é a única coisa que o corrigiu. Eu tentei muitas outras dicas e sugestões, mas nada mais funcionou. Somente a reinicialização + reconstrução ajudou.

Bruce L
fonte
Como será se o usuário atualizará o aplicativo na AppStore? Ele precisará reiniciar o dispositivo?
Kokos8998
17

Minha solução @iOS 11.x:

  • Use .jpgimagem em vez de.png . Eu acho que o tamanho do arquivo de imagem é importante;
  • (Opcionalmente) Coloque o arquivo de imagem no diretório do projeto em vez de .xcassets;
Ke Yang
fonte
3
Colocar o arquivo de imagem fora do .xcassetsajudou
Husam
@Husam Eu realmente acho que é o tamanho do arquivo que só importa. Eu tenho uma tela de inicialização com duas imagens: uma grande (400 + KB .png) e um logotipo (10 + KB .png, dentro de .xcassets). O logotipo sempre aparece normalmente, mas o grande não.
Ke Yang
Você está certo .. Após o meu comentário, o problema apareceu novamente após adicionar outra imagem. Obrigado pela vossa ajuda.
Husam
2
Em seguida, seguiu as instruções usando a imagem jpg e trabalhou #
Husam
16

Eu tinha o mesmo para o aplicativo instalado no TestFlight. Excluir aplicativo -> reiniciar o iPhone -> reinstalar o aplicativo funciona para mim. Apenas reinstalar o aplicativo ou apenas reiniciar o dispositivo não ajudou.

Petro Shm
fonte
Esta é a única coisa que funcionou para mim - gostaria de ter visto isso há 90 minutos!
KML #
gostaria de ter visto isso 4 horas atrás
gerry.liang
Funcionou para mim também, mas o problema é estranho: |
Nishu_Priya
8

Eu estava tendo o mesmo problema, mas reiniciar o dispositivo não ajudou. O que funcionou para mim foi excluir o UIImageView do meu storyboard de lançamento e adicionar um novo.

Jim Rhoades
fonte
8

Você já tentou desligar e ligar o dispositivo novamente? Faça.

Jakub Truhlář
fonte
7

O que funcionou para mim foi selecionar Redefinir conteúdo e configurações ... no menu Simulador

Redefinir conteúdo e menu Configurações

andnil
fonte
6

Tire as imagens do Image.xcassets e adicione-as novamente ao projeto. Funcionou para mim.

Trinh Tran
fonte
Isso funciona apenas porque você está forçando o aplicativo a recriar os instantâneos da Tela de Inicialização, mas não é uma solução ou razão para o problema.
andrewbuilder
6

Remova o aplicativo do celular e, em seguida, reinicie o celular e instale o aplicativo novamente. agora os problemas serão resolvidos

midhun p
fonte
5

Eu uso o dispositivo iPhone 5s, também conheço esse problema.

Eu o corrigo:

  • Remover dados da unidade

  • Limpe o projeto

  • Reinicie o Xcode

  • Remover o projeto do meu dispositivo

  • Reinicie os 5s.

Eu acho que há algo errado no Xcode usar memória, o sistema pode alocar um pouco de memória para o Xcode, porque o Xcode desenhou a imagem do almoço falhou (no meu computador, o Xcode funcionou por várias semanas sem fechar)

guozqzzu
fonte
Eu não sei, mas funcionou .. como bom. Obrigado homem por compartilhar.
Arpit B Parekh
4

Eu também tive esse problema exato no Xcode 7 com dispositivos iPad e iPhone. Embora não faça sentido, fui capaz de contorná-lo na maioria das vezes, definindo não apenas a imagem, mas também a imagem destacada na exibição da imagem para a mesma imagem em meus images.xcassets.

Bonnie Lapin
fonte
Parece ser ajudado para mim também
rafalkitta
4

Eu acho que a tela de lançamento suporta apenas imagens no Assets.xcassets.

Sunly
fonte
Eu tentei todas as respostas acima e nenhuma delas funcionou para mim. Mas essa resposta resolveu o problema.
amigos estão dizendo sobre
4

funcionou para mim.

Primeiro no xcode clean de project.

Se você usar o simulador, exclua o aplicativo e reinicie.

Se você usa um dispositivo, exclua o aplicativo e reinicie o dispositivo.

oscar castellon
fonte
3

Reiniciar o Xcode fez isso por mim.

O que não fez isso:

  • Pasta de compilação limpa
  • Reinicie o dispositivo ou o simulador (a imagem também não estava visível)
Manuel
fonte
3

Selecione o ImageView e remova a extensão da imagem (.png ou .jpg) na guia Inspetor de atributos> Exibição de imagem> Imagem> Nome da imagem.

No launchscreen.storyboard, a imagem não aparecerá, mas estará presente no dispositivo. Isso funcionou para mim.

Asha Antony
fonte
Este também foi o meu problema. Estranhamente, funcionou aleatoriamente em alguns dispositivos. Xamarin-Project com o Xcode 9.4 para edição XIB / Storyboard ...
fl034
2

Parecia um bug do iOS. Como às vezes a animação do sistema desapareceu.

Agora, basta reiniciar o iPhone e ele funciona para mim.

Amon Xu
fonte
2

No meu caso, eu era o nome da imagem .
Eu adicionei uma imagem chamada[email protected]Adicionei LaunchScreen.xib - uma das minhas telas de inicialização antigas apenas para fins de teste. Eu estava construindo no iPhone X Simulator, a imagem não apareceu.

Alterar o nome para algo neutro (MyImage.png) resolveu o problema.

Parece que isso também @2xfazia parte do problema -568h. O que faz algum sentido em um -812h@3xdispositivo.

de.
fonte
2

Isso é muito importante. Deve estar vazio !Launch Screen File

insira a descrição da imagem aqui

SwiftDeveloper
fonte
8
Ele está usando o storyboard XIB para o lançamento, esta resposta não funcionará.
Benck
2

A solução simples é usar JPG em vez de PNG.

REI
fonte
1

Tenho o mesmo problema com o imageView um storyboard da tela de lançamento. Eu removi a referência da imagem do projeto, renomeei minha imagem e a adicionei novamente ao projeto. Tudo funciona perfeitamente.

ostap_holub
fonte
1

Também pode 1. excluir a imagem do projeto 2. alterar o nome da imagem 3. adicionar a imagem do arquivo ao projeto

Funcionou para mim.

Jesse
fonte
1

Eu tive esse problema no iOS 10 em um iPhone 6 e também no Simulador. Minha imagem estava em uma pasta e esse parecia ser o problema. Removai a imagem da pasta no Xcode e a coloquei no diretório base do projeto, que resolveu o problema.

JamieDass
fonte
1

Eu experimento o mesmo. Altero a resolução da imagem de 300 pixels / polegada, altero para 72. Funciona para mim.

Tim Le
fonte
1

Em seguida me ajudou:

  • alterar "Iniciar arquivo de tela" para outro xib
  • execute o aplicativo
  • mudar xib de volta

Também é muito importante : verifique se o seu é o xib não aberto em outra guia, que também pode causar isso!

Vladimir Tolstikov
fonte
1

Encontrei uma solução simples, mas radical, que funcionou para mim:

1 - Exclua o arquivo: LaunchScreen.storyboard e mova-o para a lixeira.

2 - Produto -> Limpo

3 - Crie um novo arquivo de tela de inicialização chamado: LaunchScreen.storyboard e coloque suas imagens nele

4 - Salvar e construir

Isso funcionou para mim depois de tentar métodos complexos por horas ... Parece que meu LaunchScreen.storyboard estava bloqueado para gravação e não pôde ser salvo ou um processo estranho de armazenamento em cache estava bloqueando-o.

Fox5150
fonte
1

Nome da imagem é o problema. Renomeie o nome da imagem usada dentro do storyboard da tela Iniciar. Certifique-se de não usar nenhum caractere que não seja alfanumérico (não use "_- & @"). Trabalhou para mim como um encanto.

Aproram
fonte