UIImageView недостающие изображения в Launch Screen на устройстве

301

У меня есть приложение, которое поддерживает iOS8 и более поздние версии, встроенное в Xcode 7, и я использую XIB для экрана запуска (у меня нет стартовых изображений). Представление содержит одну UILabel с версией приложения и 2 UIImageViews с изображениями, которые присутствуют в Images.xcassets: логотип и заставку.

UILabel и изображение логотипа отображаются правильно, когда я запускаю приложение, но заставка не отображается, если я запускаю приложение на iPad Air 2 с iOS9. Я тестировал на Air и Mini под управлением iOS8 и iOS9 симуляторы для iPad 2, iPad Air и iPad Air 2, и во всех них изображение отображается правильно.

Я выполнил некоторые базовые действия по устранению неполадок, чтобы выяснить, могу ли я выяснить, что происходит, но я не смог их решить, и единственное различие, которое я вижу между работающим изображением и ошибкой, - это когда я добавляю его в активы...

Вот краткое изложение того, что я знаю:

  • UIImageView для заставки находится в правильном месте, в правильном размере. Я могу сказать это, потому что я установил его цвет фона на зеленый, чтобы убедиться. Вид есть, но изображение не появляется. Поэтому я предполагаю, что мнение не виновато.

  • Настройка UIImageView для заставки также для использования изображения логотипа заставляет изображение логотипа отображаться в правильном месте для просмотра. Это также заставляет меня предположить, что мнение не виновато.

  • UIImage, который я использую в представлении с изображением-заставкой, используется в другом месте приложения и прекрасно отображается в других представлениях (изображение логотипа также используется в другом месте в приложении и выглядит нормально). Поэтому я предполагаю, что изображение является действительным, и его появление в других представлениях не является проблемой.

  • Я подтвердил, что настройки UIImages для логотипа и заставки в файле xcassets одинаковы. Для них установлено значение Универсальный, Любая ширина и высота, несколько масштабных коэффициентов, отображаемых по умолчанию. Есть одно отличие - у логотипа есть масштаб 1x, 2x и 3x, в то время как заставка имеет только 1x и 2x, но я также попытался использовать UIImages только с 1x и 1x и 2x значениями в UIView, и они работают (если они были добавили в проект некоторое время назад).

  • Добавление другого изображения другого размера или формата (PNG и JPG) в мои xcassets и использование этого UIImage в UIImageView для заставки также не отображается.

  • Добавление другого UIImageView к файлу XIB и выделение для него UIImage, который уже был в xcassets работает, изображение появляется на экране загрузки.

  • Копирование и переименование файлов изображений, используемых для логотипа, и добавление их в проект с последующим использованием этого UIImage в виде заставки также не отображается.

  • Я попытался очистить проект, перезапустить компьютер разработчика, удалить приложение из Air 2 и переустановить его на тот случай, если это станет проблемой.

Эти последние три шага наводят меня на мысль, что существует некоторая проблема с изображениями, добавляемыми после определенного момента времени существования файла проекта. Хотя вчера я обновился до Xcode 7, изображение-заставка было первоначально добавлено в Xcode 6, но изображение логотипа (также добавленное в Xcode 6) было добавлено за несколько месяцев до этого.

Я просмотрел файлы json для изображения логотипа и заставки, и они, кажется, имеют одинаковый формат. Я также просмотрел файл pbxproj в поисках различий и не вижу их.

Поэтому мне было интересно, если кто-нибудь имел представление, почему на экране запуска могут не отображаться эти новые изображения, которые я специально добавляю в Air 2? Другие вопросы, которые я читал, касаются не всех отображаемых изображений, похоже, относятся либо к Launch Images, либо к изображениям в файлах XIB, которые имеют связанные классы, ни один из которых не представляется здесь уместным.

MFW
источник
1
Имея смысл ответить на это - я вернулся и прочитал предоставленные ответы, затем вернулся в Xcode и заново отредактировал UIImageView и изображение, чтобы опробовать их. На этот раз все работало без изменений. Я понятия не имею, почему - та же версия Xcode, я перезапустил, перестроил, очистил и удалил приложение раньше, ту же iOS, ту же Mac OS, она просто работала. Так что, к сожалению, я не смог проверить, помогло ли бы какое-нибудь из решений.
MFW
Ни один из предоставленных ответов не решил проблему. Симулятор, iPhone 5, iPhone 5 SE, iPad 4 все правильно отображают UIImageView в моем LaunchScreen.xib, iPad Air 2 не показывает его. Перезагружал все устройства, переустанавливал на все устройства. Поведение остается.
Кристиан
Эй, вы должны принять более 130 голосов.
Хан Нгуен
Я согласен с Khanh, это работает для большинства !!
Gunjot Singh
@ MFW, ПРИНЯТЬ ОТВЕТ FFS! IM ОТЧЕТ U в КОПС.
GeneCode

Ответы:

476

Выключите, а затем снова включите.

Если серьезно, перезагрузите устройство - это то, что исправило это для меня.

Вот что не сработало:

  • Чистка DerivedData
  • Очистка проекта
  • Удаление приложения с устройства
  • Перезапуск Xcode
  • Перезагрузка компьютера

Старые наблюдения:

Как и другие, это:

  • Отлично работает в симуляторе
  • Используется для работы на устройствах (iPhone 5S, iPad Air)
  • Никаких изменений кода (проверено через git reset --hard HEAD), но перестал работать.

То, что я помню, вызвало первую сборку, где он перестал работать, было отключение iPhone во время его работы. (Не уверен, если это связано.)

Тем не менее, git reset не исправляет его (в сочетании со всеми не работающими чистыми шагами) говорит мне, что это должно быть кэшировано где-то еще. Вполне возможно, в одном из файлов .gitignored? (Я использую Git игнорировать файл для проектов XCode )

Одним из обходных путей, который работал для одного UIImageView (в UIView, который имеет три), но не для других, было помещение изображения в файл .xcassets. Возврат к файлу простого изображения не отменил исправление. (Действительно похоже на ошибку кэширования.)

ОБНОВЛЕНИЕ: Смотрите сверху - перезапуск устройства - это то, что исправило его. У меня такое ощущение, что на самом устройстве кешируются неправильные растровые данные.

Радар: http://openradar.appspot.com/23534818

Арал Балкан
источник
31
Просто перезагрузка симулятора сделала это для меня. Псих!
FractalDoctor
1
Спасибо! Это исправило это и для меня.
CodenameDuchess
6
Как вы думаете, пользователи App Store столкнутся с той же проблемой?
Адам Уэйт
1
@danielstorm никогда не узнал, чтобы быть честным
Адам Уэйт
2
Что за отсталый жук, например, яблоко. Перезагрузка моего телефона сработала для меня, спасибо.
Джейкоб Кинг
151

«Решением для меня было просто убедиться, что флажок« Очистить графический контекст »не отмечен для UIImageView в раскадровке. Просто изменив это, я это исправил». Никакие другие решения не помогли мне. Получил с форума разработчиков Apple

введите описание изображения здесь

NikLanf
источник
2
Блин, я бы никогда не подумал попробовать это. Исправлены симулятор и устройство с Xcode 7.3.1 (7D1014) и iOS 9.3.2 Developer Beta 3.
Поползень
3
Я могу подтвердить, что это также сработало для меня. Xcode 7.3 и iOS 9.3.2.
Торбьерн Кристофферсен
1
Даже с моим уже проверил - сняв галочку и перепроверив сделали свое дело!
одинокий свисток
1
Хороший +1 за ваш ответ, работает также в Xcode 8 и iOS 10
Skovie
1
Это правильный ответ. Проверено на iOS 11, на устройстве.
Джберлана
99

У меня была точно такая же проблема на iPhone 6.

Очень странный факт заключается в том, что я смог использовать другое изображение из моего images.xcassets, которое имело тот же размер, сжатие, цветовое пространство ...

Я не могу понять, почему это не работает, но я нашел решение: просто поместите свой файл вне вашего images.xcassets и используйте его полное имя (с расширением) в Интерфейсном Разработчике

splashScreen в образце раскадровки

Надеюсь, это поможет!

gbitaudeau
источник
1
Это было первое, что я попробовал, но у меня это не работает.
Пол Слокум
Это сработало для меня; Спасибо. Хотелось бы знать, почему это работает только для некоторых изображений в файлах xcassets ...
Кристофер Кинг
Для меня это работает с самого начала, но теперь свойства изображения или метки вообще не обновляются. Даже после чистого действия продукта. Подал ошибку здесь: bugreport.apple.com
Филипп Борхес
Перезагрузка iPhone 6s после удаления приложения сделала свою работу. До этого также проверялось решение NikLanf ниже «очищает графический контекст».
Мэтью Фергюсон
Это работает. Причина в том, я думаю, что из-за .xcasset еще не загружен, когда отображается экран запуска. Если вы подумаете об этом, то именно для этого предназначен экран запуска - время ожидания загрузки содержимого приложения ios, включая xcasset. Я полагаю, что это не работает, поскольку все, что находится в корневой папке приложения, будет загружено первым.
GeneCode
33

Следующая последовательность операций устранила проблему для меня на Xcode 7.3.1 и iOS 9.3.4:

  1. Очистите свою сборку (⌘ + ⇧ + K)
  2. Закрыть Xcode
  3. Устройство iOS с полной перезагрузкой (перезагрузка с кнопкой Power + Home)
  4. Перезапустите Xcode - дайте индексированию завершиться и соберите устройство, как только оно будет готово.
mayankk2308
источник
Спас мой день! Спасибо!
Зак
Работал. Я не делал шаги 2 и 4. Возможно, нужен только Hard Reset устройства iOS, кто-нибудь может это подтвердить?
Тимоти Л.Дж. Стюарт
@ TimothyL.J.Stewart Шаги 2 и 4 были просто более предупредительными мерами, которые я предпринял, потому что проблема была довольно раздражающей для меня - так что это было просто для уверенности. Я думаю, что вы правы, говоря, что они могут быть ненужными, поскольку они не влияют (как правило) на сборку.
mayankk2308
Xcode 8 Swift 3.0 Выключение или полная перезагрузка - единственное, что работает каждый раз и должно выполняться каждый раз, когда добавляется новый актив. Удаление DerivedData не делает. Однако изображение работает правильно в симуляторе. Это потратило так много моего времени, спасибо @MayankKumar за решение.
Тимоти LJ Стюарт
Работал как шарм
lborgav
27

Многие другие ответы предлагают перезагрузку устройств и / или восстановление и / или переустановка является решением.

В то время как эти ответы работают для некоторых из нас, причина их работы в том, что приложение вынуждено «пересдавать» или «перестраивать» кэшированные снимки.

Кэшированные моментальные снимки используются приложениями для представления изображений перед загрузкой данных поддержки в память, включая каталог ресурсов, содержащий изображения раскадровки.

Этот SO-ответ @jaga предоставляет решение, но не причину того, почему UIImageViews отсутствуют на экране запуска на устройстве (но не в симуляторе).

Задний план

Недавно я попытался использовать собственный шрифт в файле «Launch Screen.storyboard».

Причина, по которой я не смог понять, после прочтения этого SO ответа @TimCamber, что побудило меня немного больше исследовать и исследовать.

Причина, по которой пользовательский шрифт не включен в мой файл раскадровки Launch Screen - это та же самая причина, по которой изображение в каталоге ресурсов не включено ...

Приложение готовит портретные и альбомные снимки экрана запуска приложения из файла раскадровки Launch Screen и (в настоящее время) сохраняет его в комплекте приложения здесь:

  • /Library/Caches/Snapshots/<<app_bundle>>/ и
  • /Library/Caches/Snapshots/<<app_bundle>>/downscaled/,

Этот процесс завершается до загрузки любых вспомогательных файлов, включая любые пользовательские шрифты и каталог ресурсов.

Решение

Как уже упоминалось выше, следуя решению @ jaga, буквально все, что требуется, это:

  1. (старая школа) добавьте файл изображения (.PNG) в комплект вашего приложения (как вы можете видеть на скриншоте ниже, я добавил файл изображения в подкаталог Supporting Files в подкаталоге Images), и

снимок экрана с соответствующими каталогами в Project Navigator в Xcode

  1. ссылаться на это изображение в вашем объекте UIImageView в файле раскадровки Launch Screen ...

снимок экрана раздела просмотра изображений для UIImageView под инспектором атрибутов в XCode

andrewbuilder
источник
Спасибо, я боролся с этим некоторое время. Это подходит для меня.
Джеймс Лоренстин
работал на меня напрямую. это должен быть правильный ответ
Мухаммед Шрайм
При запуске IOS не смог скомпилировать ресурсы, поэтому поместил ваше изображение в пакет работ. Спасибо.
icould
Лучший ответ на данный момент. Я добавлю это: изображение должно быть в корневой директории пакета приложения. В противном случае вы должны указать полный путь «Media / launch_v1_200_mod.png», если вы храните изображения в подкаталоге.
MoVod
1
Я сделал то же самое. Мое приложение уже запущено, но проблема в том, что иногда оно показывает изображение, а иногда оно показывает квадрат с белым цветом в середине экрана
Punit
21

Я видел ту же проблему. Перезагрузка устройства (iPhone 6) и восстановление приложения на устройстве - единственное, что исправило его. Я перепробовал много других советов и предложений, но больше ничего не получалось. Помогла только перезагрузка + перестройка.

Брюс Л
источник
Как это будет выглядеть, если пользователь обновит приложение из AppStore? Нужно ли ему перезагрузить устройство?
kokos8998
17

Мое решение @iOS 11.x:

  • Используйте .jpgизображение вместо .png. Я думаю, что размер файла изображения имеет значение;
  • (Необязательно) Поместите файл изображения в каталог проекта, а не .xcassets;
Ке Ян
источник
3
Ввод файла изображения вне .xcassetsпомогли
Husam
@Husam Я действительно думаю, что размер файла имеет значение. У меня есть экран запуска с двумя изображениями: большим (400 + КБ .png) и логотипом (10 + КБ .png, внутри .xcassets). Логотип всегда отображается нормально, а большой - нет.
Ке Ян
Вы правы .. После моего комментария проблема появилась снова после добавления другого изображения. Спасибо за вашу помощь
Хусам
2
Затем следовал вашим инструкциям с помощью изображения jpg и работал
Husam
Что если вам нужна прозрачность?
JCutting8
16

У меня было то же самое для приложения, установленного из TestFlight. Удалить приложение -> затем перезагрузить iPhone -> затем переустановить приложение работает для меня. Просто переустановить приложение или просто перезапустить устройство не помогло.

Петро Шм
источник
Это единственное, что сработало для меня - жаль, что я не видел это 90 минут назад!
KML
жаль, что я не видел это 4 часа назад
gerry.liang
У меня тоже сработало, но проблема странная: |
Nishu_Priya
8

У меня была такая же проблема, но перезапуск устройства не помог. Для меня сработало удаление UIImageView из моей раскадровки запуска и добавление нового.

Джим Роудс
источник
8

Вы пытались выключить и снова включить устройство? Сделай это.

Якуб Трухларж
источник
7

Для меня сработало выбрать « Сбросить содержимое и настройки» в меню «Симулятор».

Сбросить содержимое и меню настроек

andnil
источник
6

Извлеките изображения из Image.xcassets и добавьте их снова в проект. Это сработало для меня.

Трин Тран
источник
Это работает только потому, что вы заставляете приложение заново создавать снимки экрана запуска, но это не решение или причина проблемы.
andrewbuilder
6

Удалите приложение с мобильного, а затем перезапустите мобильное и установите приложение снова. теперь вопросы будут решены

мидхун р
источник
5

Я использую устройство iPhone 5s, также встретить эту проблему.

Я исправляю это:

  • Удалить данные с диска

  • Очистить проект

  • Перезапустите Xcode

  • Удалить проект с моего устройства

  • Перезапустите 5 с.

Я думаю, что в Xcode неправильно использовать память, система может выделить немного памяти для Xcode, потому что Xcode не смог нарисовать обеденное изображение (на моем компьютере Xcode работал без остановки несколько недель)

guozqzzu
источник
Я не знаю, но это сработало .. вроде хорошо. Спасибо, человек, что поделился.
Арпит Б Парех
4

У меня также была именно эта проблема в Xcode 7 с устройствами iPad и iPhone. Хотя это и не имело смысла, в большинстве случаев мне удавалось обойти это, установив не только изображение, но и выделенное изображение в представлении изображения на то же изображение в моем файле images.xcassets.

Бонни Лапин
источник
Кажется, мне тоже
помогают
4

Я думаю, что экран запуска поддерживает только изображение в Assets.xcassets.

Sunly
источник
Я перепробовал все ответы выше, и ни один из них не помог мне. Но этот ответ решил проблему.
Эркан Челик
4

это работает для меня.

Сначала в xcode clean de project.

Если вы используете симулятор, удалите приложение и перезапустите.

Если вы используете устройство, удалите приложение и перезапустите устройство.

Оскар Кастельон
источник
3

Перезапуск Xcode сделал это для меня.

Что не делал:

  • Очистить папку сборки
  • Перезапустите устройство или симулятор (изображение не было видно ни на одном)
Manuel
источник
3

Выберите ImageView, а затем удалите расширение изображения (.png или .jpg) на вкладке инспектора атрибутов> Представление изображения> Изображение> Имя изображения.

На файле launchscreen.storyboard изображение не появится, но оно будет в устройстве. Это сработало для меня.

Аша Антоний
источник
Это тоже была моя проблема. Странно это случайно работало на некоторых устройствах. Xamarin-Project с Xcode 9.4 для редактирования XIB / раскадровки ...
fl034
2

Казалось, ошибка iOS. Вроде иногда пропала анимация системы.

Сейчас я просто перезагружаю iPhone, и он работает для меня.

Амон Сюй
источник
2

В моем случае это было имя изображения .
Я добавил изображение с именем Default-568h@2x.pngв LaunchScreen.xib - один из моих старых экранов запуска только для целей тестирования. Я строил на iPhone X Simulator, изображение не показывалось.

Изменение имени на что-то нейтральное (MyImage.png) решило проблему.

Кажется, что это @2xбыла часть проблемы, а также -568h. Что имеет смысл на -812h@3xустройстве.

де.
источник
2

Это слишком важно Должно быть пустым !Launch Screen File

введите описание изображения здесь

SwiftDeveloper
источник
8
Он использует раскадровку XIB для запуска, этот ответ не будет работать.
Бен
2

Простое решение - использовать JPG вместо PNG.

КОРОЛЬ
источник
JPEG не поддерживает прозрачность.
JCutting8
1

У меня та же проблема с imageView раскадровки экрана запуска. Я удалил ссылку на изображение из проекта, переименовал свое изображение и снова добавил его в проект. Все работает отлично.

ostap_holub
источник
1

Также можно 1. удалить изображение проекта 2. изменить имя изображения 3. добавить изображение файла в проект

Это сработало для меня.

Джесси
источник
1

У меня была эта проблема в iOS 10 на iPhone 6, а также в симуляторе. Мое изображение было в папке, и это казалось проблемой. Я удалил изображение из папки в Xcode и поместил его в базовый каталог проекта, что решило проблему.

JamieDass
источник
1

Я испытываю то же самое. Я меняю разрешение изображения с 300 пикселей / дюйм, меняю его на 72. У меня это работает.

Тим Ле
источник
1

Следующее помогло мне:

  • замените «Файл экрана запуска» на другой xib
  • запустить приложение
  • изменить XIB обратно

Также очень важно : убедитесь, что ваш xib не открыт в другой вкладке, что также может быть причиной этого!

Владимир Толстиков
источник
1

Я нашел простое, но радикальное решение, которое сработало для меня:

1 - Удалить файл: LaunchScreen.storyboard и переместить его в корзину.

2 - Продукт -> Чистый

3 - Создайте новый файл экрана запуска с именем: LaunchScreen.storyboard и поместите в него ваши изображения

4 - Сохранить и построить

Это сработало для меня после нескольких часов сложных процедур ... Кажется, что моя LaunchScreen.storyboard была заблокирована от записи и не могла быть сохранена, или странный процесс кэширования блокировал ее.

Fox5150
источник
1

Название изображения является проблемой. Переименуйте имя изображения, используемое в раскадровке экрана запуска. Удостоверьтесь, что вы не используете никаких символов, кроме буквенно-цифровых (не используйте "_- & @"). Работает для меня как шарм.

Aproram
источник