UIImageView відсутні зображення на екрані запуску на пристрої


301

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

Зображення UILabel і логотип відображаються правильно під час запуску програми, але зображення сплеску не відбувається, якщо я запускаю додаток на iPad Air 2 з iOS9. Я перевірив на iOS8 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 для зображення сплеску також не відображається.

  • Додавши до файлу XIB ще один UIImageView і виділивши йому UIImage, який вже був у xcassets, зображення з'являється на екрані завантаження.

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

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

Ці три останні кроки спонукають мене до думки, що існує певна проблема із зображеннями, доданими після певного моменту життя файлу проекту. Поки я вчора оновлювався до Xcode 7, зображення сплеску спочатку було додано в Xcode 6, але зображення логотипу (також додане в Xcode 6) було додане за кілька місяців до цього.

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

Тож мені було цікаво, чи хтось мав ідею, чому екран запуску може не відображати ці нові зображення, які я спеціально додаю в Ефір 2? Інші питання, які я читав, стосуються зображень, які не з’являються всі, схоже, стосуються або "Запуск зображень", або зображень у файлах XIB, які мають асоційовані класи, жодне з яких тут не видається релевантним.


1
Мати сенс відповісти на це - я повернувся і прочитав надані відповіді, потім повернувся до Xcode і повторно додав UIImageView і зображення, щоб спробувати їх випробувати. Цього разу це спрацювало без жодних змін. У мене немає поняття, чому - таку ж версію Xcode я перезапустив, відновив, очистив і видалив додаток раніше, той же iOS, та ж Mac OS, він просто працював. Тож, на жаль, я не зміг перевірити, чи допомогло б якесь із рішень.
MFW

Для мене НІхто з наданих відповідей не вирішив проблему. Симулятор, iPhone 5, iPhone 5 SE, iPad 4 усі відображають UIImageView в моєму LaunchScreen.xib правильно, iPad Air 2 не відображатиме його. Перезавантажили всі пристрої, знову встановили на всіх пристроях. Поведінка залишається.
Крістіан

Привіт, ви повинні прийняти відповідь 130+.
Хан Нгуен

Я згоден з Ханом, він працює для більшості !!
gunjot singh

@MFW, ПРИЙНІТЬ ВІДПОВІДЬ FFS! ІМ ЗВІТНІСТЬ У КОП.
GeneCode

Відповіді:


474

Якщо вимкнути, а потім знову ввімкніть.

Серйозно, перезавантажте пристрій - ось що це виправило для мене.

Ось що не спрацювало:

  • Очищення отриманих даних
  • Прибирання проекту
  • Видалення програми з пристрою
  • Перезапуск Xcode
  • Перезавантаження комп'ютера

Старіші спостереження:

Як і інші, воно:

  • Добре працює в тренажері
  • Використовується для роботи на пристроях (iPhone 5S, iPad Air)
  • Жодних змін коду (підтверджено через скидання git - тверда HEAD), але робота перестала працювати.

Я пам’ятаю, що запустив першу збірку там, де вона перестала працювати, - це відключення iPhone від підключення під час роботи. (Не впевнений, чи це пов’язано.)

Однак скидання git не виправляє його (у поєднанні з усіма чистими кроками, що не працюють) говорить мені, що це має бути кешоване десь в іншому місці. Цілком можливо в одному з .gitignored файлів? (Я використовую файл ігнорування Git для проектів Xcode )

Одне вирішення, яке працювало для одного UIImageView (у UIView, у якого є три), але не для інших, було введення зображення у файл .xcassets. Повернення до простого файлу зображень не скасувало виправлення. (Дійсно, це помилка кешування.)

ОНОВЛЕННЯ: Дивіться вгорі - перезавантаження пристрою - це те, що виправлено. Я відчуваю, що неправильні дані растрових зображень кешуються на самому пристрої.

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


31
Просто перезапуск симулятора зробив це для мене. Божевільний!
FractalDoctor

1
Дякую! Це виправило і для мене.
CodenameDuchess

6
Як ви думаєте, у користувачів App Store виникне та сама проблема?
Адам Уейт

1
@danielstorm так і не виявився чесним
Адам Уайте

2
Яка відстала помилка, гг яблуко. Передача телефону працювала на мене, дякую.
Яків Король

151

"Для мене рішення було просто переконатися, що поле" Очищає графічний контекст "не встановлено для UIImageView на аркуші розмитнення. Просто змінивши це, виправили це для мене." Жодні інші рішення для мене не працювали. Отримав це з форуму для розробників яблук

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


2
Чорт, я ніколи не думав би спробувати це. Виправляє симулятор та пристрій з Xcode 7.3.1 (7D1014) та iOS 9.3.2 Developer Beta 3.
Nuthatch

3
Я можу підтвердити, що це працювало і для мене. Xcode 7.3 та iOS 9.3.2.
Torbjørn Kristoffersen

1
Навіть з моєю вже перевіреною - зняття та повторна перевірка зробила свою справу!
самотнійгуст

1
Приємний +1 для вашої відповіді, працює також у Xcode 8 та iOS 10
Skovie

1
Це правильна відповідь. Доведено на iOS 11, на пристрої.
jberlana

99

У мене був такий самий випуск на iPhone 6.

Дуже дивний факт полягає в тому, що я зміг використати інше зображення з моїх images.xcassets, які мали однаковий розмір, стиснення, кольоровий простір ...

Я не в змозі знайти, чому це не працює, але я знайшов рішення: просто поставте свій файл поза вашими images.xcassets і використовуйте його повне ім’я (з розширенням) в Interface Builder

splashScreen у зразку розкадрування

Сподіваюся, що це допоможе!


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 Button)
  4. Відновіть Xcode - нехай індексація закінчується та будується на пристрої, як тільки вона готова.

Врятував мій день! Дякую!
Зак Чжу

Працювали. Я не робив кроків 2 і 4, можливо, потрібен лише жорсткий скидання пристрою iOS, хтось може це підтвердити?
Тимофі Л.Ж. Стюарт

@ TimothyL.J.Stewart Кроки 2 і 4 були просто більш обережними кроками, які я вжив, тому що ця проблема була для мене досить роздратованою - тому це було просто, щоб бути впевненим. Я думаю, що ти маєш рацію, кажучи, що вони можуть бути непотрібними, оскільки вони насправді (як правило) не впливають на збірку.
mayankk2308

Xcode 8 Swift 3.0 Вимкнення або жорстке скидання - це єдине, що працює кожного разу, і це потрібно робити щоразу, коли додається новий актив. Видалення DerivedData не робить. Однак зображення працює в тренажері належним чином. Це витратив стільки мого часу, дякую @MayankKumar за рішення.
Тімоті Л. Дж. Стюарт

Працював як шарм
lborgav

27

Багато інших відповідей пропонують перезавантажити пристрої та / або відновити та / або перевстановити рішення.

Хоча ці відповіді працюють для деяких із нас, причина цих робіт полягає в тому, що додаток змушений "переробити" або "відновити" кешовані знімки.

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

Ця відповідь ТА від @jaga пропонує рішення, але не причину того, чому UIImageViews відсутні на екрані запуску на пристрої (але не в тренажері).

Фон

Нещодавно я спробував використати нестандартний шрифт у своєму файлі "Launch Screen.storyboard".

Причиною я не зміг стати зрозумілим, прочитавши цю відповідь SO від @TimCamber, яка підштовхнула мене зробити ще кілька досліджень та тестувань.

Причина того, що спеціальний шрифт не включений до мого файлу розгортки екрана запуску, є тією ж причиною, що зображення в каталозі активів не включено ...

Додаток готує знімки з портретами та пейзажем на екрані запуску програми з вашого файлу розгортки екрана запуску і (на даний момент) зберігає його у пакеті програми тут:

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

Цей процес завершено до завантаження будь-яких підтримуючих файлів, включаючи будь-які власні шрифти та каталог об’єктів.

Рішення

Як було сказано вище, дотримуючись рішення @ jaga, буквально все, що потрібно:

  1. (стара школа) додайте файл файлів зображень (.PNG) до пакету вашої програми (як видно із скріншоту нижче. Я додав файл зображення у підкаталог «Підтримуючі файли» у підкаталозі «Образи») та

скріншот відповідних каталогів у Навігаторі проектів у Xcode

  1. посилайтеся на це зображення у вашому об'єкті UIImageView у файлі розгортки екрану запуску ...

скріншот розділу «Перегляд зображень» для UIImageView у розділі «Атрибути інспектора» у Xcode


Дякую, що я вже мало часу боровся з цим. Це працює для мене.
Джеймс Лоренстін

працював на мене безпосередньо. це має бути правильна відповідь
Мохаммед Шраім

Під час запуску IOS не зміг зібрати активи, тому розміщення вашого зображення для пакетних робіт. Дякую.
ICould

Найкраща відповідь поки що. Я додам це: зображення повинно бути в кореневому каталозі пакета додатків. В іншому випадку вам доведеться надати повний шлях "Media / start_v1_200_mod.png", якщо ви зберігаєте зображення в підпорядкуванні.
MoVod

1
Я робив те саме. Мій додаток уже в прямому ефірі, але проблема полягає в тому, що він показує зображення, а іноді він показує квадрат із білим кольором посередині екрана
карайте

21

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


Як це буде виглядати, якщо користувач оновить додаток із AppStore? Чи буде йому потрібно перезавантажувати свій пристрій?
kokos8998

17

Моє рішення @iOS 11.x:

  • Використовуйте .jpgзображення замість .png. Я думаю, що розмір файлу зображення має значення;
  • (Необов’язково) Вставте файл зображення в каталог проектів, а не .xcassets;

3
Вивести файл із зображеннями .xcassetsдопоміг
Хусам

@Husam Я дійсно думаю, що це важливий лише розмір файлу. У мене екран запуску з двома зображеннями: великим (400 + KB .png) та логотипом (10 + KB .png, всередині .xcassets). Логотип завжди відображається нормально, але великий - ні.
Ке Ян

Ви маєте рацію .. Після мого коментаря проблема знову з’явилася після додавання іншого зображення. Дякую за допомогу
Хусам

2
Потім дотримуйтесь ваших вказівок, використовуючи jpg зображення і працював
Хусам

16

У мене було те саме для програми, встановленої з TestFlight. Видалити додаток -> потім перезавантажте iPhone -> після чого перевстановлення програми працює для мене. Просто перевстановити додаток або просто перезапустити пристрій не допомогло.


Це єдине, що для мене спрацювало - хоч би я бачив це 90 хвилин тому!
KML

якби я бачив це 4 години тому
gerry.liang

Працював і для мене, але проблема дивна: |
Nishu_Priya

8

У мене була така ж проблема, але перезавантаження пристрою не допомогло. Що для мене спрацювало - видалити UIImageView зі моєї запускної панелі запуску та додати нову.



7

Що для мене спрацювало - вибрати Скинути вміст і налаштування ... у меню Симулятора

Скидання вмісту та меню налаштувань


6

Виведіть зображення з Image.xcassets та додайте їх знову до проекту. Це працювало для мене.


Це працює лише тому, що ви змушуєте додаток відтворювати знімки екрана запуску, але це не є рішенням або причиною проблеми.
andrewbuilder

6

Видаліть програму з мобільного, а потім перезапустіть мобільний і встановіть додаток знову. тепер питання будуть вирішені


5

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

Я виправляю це:

  • Видаліть дані накопичувача

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

  • Перезавантажте Xcode

  • Видаліть проект із мого пристрою

  • Перезапустіть 5s.

Я думаю, що в Xcode щось не так, щоб використовувати пам'ять, система може виділити трохи пам’яті для Xcode, тому що Xcode малювання обіднього зображення не вдалося (На моєму комп’ютері Xcode працював кілька тижнів без закриття)


Не знаю, але це працювало .. як добре. Спасибі людині за спільний доступ.
Арпіт Б Парех

4

У мене також була така проблема в Xcode 7 з пристроями iPad та iPhone. Хоча це не має сенсу, я був у змозі обійти його більшу частину часу, встановивши не тільки зображення, але й виділене зображення у вигляді зображення на те саме зображення, що і в моїх зображеннях.


Здається, мені теж
допоможуть

4

Я думаю, що на панелі запуску підтримується лише зображення у Assets.xcassets.


Я спробував усі відповіді вище, і жодна з них не працювала на мене. Але ця відповідь вирішила питання.
Еркан Челік

4

це працює для мене.

Перший у xcode clean de project.

Якщо ви використовуєте тренажер, видаліть програму та перезапустіть.

Якщо ви використовуєте пристрій, видаліть програму та перезавантажте пристрій.


3

Перезапуск Xcode зробив це для мене.

Що не зробив:

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

3

Виберіть ImageView, а потім видаліть розширення зображення (.png або .jpg) на вкладці інспектора атрибутів> Перегляд зображення> Зображення> Назва зображення.

На runscreen.storyboard зображення не з’явиться, але воно буде там у пристрої. Це працювало для мене.


Це була і моя проблема. Як не дивно, це випадково працювало на деяких пристроях. Xamarin-Project з Xcode 9.4 для редагування XIB / Storyboard ...
fl034,

2

Здавалося, помилка iOS. Як іноді системна анімація зникала.

Зараз я просто перезавантажую iPhone, і він працює для мене.


2

У моєму випадку я це була назва зображення .
Я додав зображення на ім'я Default-568h@2x.pngLaunchScreen.xib - один із моїх старих екранів запуску саме для тестування. Я будував на iPhone X Simulator, зображення не з’являлося.

Зміна назви на щось нейтральне (MyImage.png) вирішило проблему.

Схоже, це @2xбуло частиною проблеми, а також -568h. Що має певний сенс на -812h@3xпристрої.


2

Це занадто важливо Повинно бути порожнім !Launch Screen File

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


8
Він використовує розкадровку XIB для запуску, ця відповідь не буде працювати.
бек


1

У мене така ж проблема із imageView. Я видалив посилання на малюнок з проекту, перейменував своє зображення і знову додав його до проекту. Все працює чудово.


1

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

Це працювало для мене.


1

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


1

Я переживаю те саме. Я змінюю роздільну здатність зображення з 300 пікселів / дюйм, змінюю його на 72. Це працює для мене.


1

Далі мені допомогли:

  • змінити "Запустити екранний файл" на інший xib
  • запустити додаток
  • змінити xib назад

Також дуже важливо : перевірте, чи ваш xib не відкритий на іншій вкладці, що також може спричинити це!


1

Я знайшов просте, але радикальне рішення, яке працювало для мене:

1 - Видаліть файл: LaunchScreen.storyboard та перемістіть його у кошик.

2 - Продукт -> Очистити

3 - Створіть новий файл запуску з назвою: LaunchScreen.storyboard і помістіть у нього свої зображення

4 - Зберегти та скласти

Це працювало для мене після того, як годинами пробували складні методи ... Схоже, моя LaunchScreen.storyboard була заблокована на записі і її неможливо було зберегти, або дивний процес кешування блокував її.


1

Ім’я зображення - проблема. Перейменуйте ім’я зображення, яке використовується на екранній панелі розгортки екрана. Не забудьте використовувати жоден символ, окрім буквено-цифрових (не використовуйте "_- & @").

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.