Проблемы с заставкой PhoneGap и iPhone 6 Plus
Хорошо, поэтому, обновляя мое приложение для iOS 8 и более крупных iPhone, я заметил проблему, что я не могу понять, как ее решить.
В моем приложении PhoneGap я добавил новую библиотеку активов в Xcode для заставки, я добавил два новых изображения: один для iPhone 6 и один для iPhone 4 Plus.
Они работают, и приложение теперь не масштабируется, как и без этих изображений.
Проблема в том, что на iPhone 6 Plus, когда приложение загружается, заставка сначала кажется прекрасной, но через секунду или два она меняет размер и отображает экран, так как экран меняет свой размер, а теперь половина логотип отключен от экрана, кто-нибудь еще видел это и знает, как его исправить? Изображение является правильным размером, как это продиктовано Apple, поэтому не уверен, почему его изменение размера загрузки среднего приложения.
Ответы
Ответ 1
Я столкнулся с той же проблемой, с которой я сузился до плагина splashscreen (org.apache.cordova.splashscreen
). Вот шаги, необходимые для исправления проблемы как на iPhone 6, так и на iPhone 6 +:
- Обновить до последней версии плагина splashscreen (который был исправлен на GitHub):
-
cordova plugin remove org.apache.cordova.splashscreen
-
cordova plugin add https://github.com/apache/cordova-plugin-splashscreen.git
- Восстановите всю платформу iOS через кордову:
-
cordova platform remove ios
-
cordova platform add ios
-
cordova build ios
- Убедитесь, что ваши изображения для iPhone 6 и iPhone 6+ называются
[email protected]~iphone.png
и [email protected]~iphone.png
соответственно. Затем в Xcode перетащите оба файла изображений в Resources/splash
в соответствии с целевой целью проекта в Навигаторе проектов (панель слева от экрана по умолчанию).
Похоже, что плагин splashscreen создает фальшивый экран-заставку, который идеально идеально подходит к реальному всплывающему экрану iOS, а когда вы вызываете splashscreen.hide()
, вы фактически скрываете поддельный всплеск. Просто, в случае iPhone 6/6 +, фальшивый экран-заставка ошибочен с версией плагина, который вы в настоящее время получаете с cordova plugin add org.apache.cordova.splashscreen
, и вы видите размер изменения изображения и выходите из экрана, когда реальный экран заставки скрыт.
Ответ 2
Итак, из-за сложности настройки наших проектов, я не смог удалить и добавить ios/android. Я попытался создать новый проект Cordova 3.6 и установить новый плагин splashscreen, но это также не сработало, как ожидалось.
Я смог решить проблему, хотя, возможно, не лучшее решение, это то, что я сделал.
Внутри проекта iOS файл CordovaLib/CDVAvailability.h я добавил две строки:
#define CDV_IsIPhone6Plus() ([[UIScreen mainScreen] bounds].size.height == 736 && [[UIScreen mainScreen] bounds].size.width == 414)
#define CDV_IsIPhone6() ([[UIScreen mainScreen] bounds].size.height == 667 && [[UIScreen mainScreen] bounds].size.width == 375)
Затем в моем CDVSplashScreen.m я добавил:
if (CDV_IsIPhone5()) {
imageName = [imageName stringByAppendingString:@"-568h"];
}else if (CDV_IsIPad() && isOrientationLocked) {
switch (orientation) {
case UIInterfaceOrientationLandscapeLeft:
case UIInterfaceOrientationLandscapeRight:
imageName = [imageName stringByAppendingString:@"-Landscape"];
break;
case UIInterfaceOrientationPortrait:
case UIInterfaceOrientationPortraitUpsideDown:
default:
imageName = [imageName stringByAppendingString:@"-Portrait"];
break;
}
}
To:
if (CDV_IsIPhone5()) {
imageName = [imageName stringByAppendingString:@"-568h"];
}else if(CDV_IsIPhone6Plus()){
imageName = [imageName stringByAppendingString:@"-568h"];
}else if(CDV_IsIPhone6()){
imageName = [imageName stringByAppendingString:@"-568h"];
} else if (CDV_IsIPad() && isOrientationLocked) {
switch (orientation) {
case UIInterfaceOrientationLandscapeLeft:
case UIInterfaceOrientationLandscapeRight:
imageName = [imageName stringByAppendingString:@"-Landscape"];
break;
case UIInterfaceOrientationPortrait:
case UIInterfaceOrientationPortraitUpsideDown:
default:
imageName = [imageName stringByAppendingString:@"-Portrait"];
break;
}
}
Не знаю, почему изображение 568h работает правильно, но я попытался указать изображения 736 и 667, но это не сработало. Простое добавление этих двух фрагментов кода, теперь экран заставки работает правильно на iPhone 6+ и 6.
К сожалению, это исправление является решением для каждого проекта, поскольку оно включает редактирование исходного файла Кордовы.
Ответ 3
Я только что обновил свой плагин с плагинами от 0.3.3 до 0.3.4 и заставку заработало правильно для iphone 6 и iphone 6+.
Ответ 4
Исправление этой ошибки заключается в добавлении суффикса с pixelratio в конце имени изображения в виде заставки - например, "Default-667h.png" должно быть "[email protected]~iphone.png". Для iPhone 6+ pixelratio равно 3, поэтому имя изображения должно быть изменено с "Default-736h.png" на "Default [email protected]~iphone.png".
Ответ 5
Ни один из ответов не решил проблему для меня - всплеск все еще не работал правильно в iPhone 6 и 6s (хотя он хорошо работал для всех других iPhone). В частности - обновление плагина, наложение изображений, проверка ресурсов Bundle - не помогло. Удаление и добавление платформы - это то, чего я всегда стараюсь избегать, потому что это означает, что часы работы снова соединяют все биты - я попробовал, и даже это не помогло. Надеюсь, этот пост спасет вас все это время:-)
Единственное решение, которое сработало для меня, - это прекратить использование каталога активов и определить всплеск в файле APP-Info.plist. Вот инструкции:
- Из моего опыта работы с Cordova: всегда создавайте резервную копию всей папки проекта. Простая копия/вставка в качестве резервной копии может сэкономить массу неприятностей. Итак, начните с простой резервной копии
- В Xcode перейдите на целевой экран вашего приложения, прокрутите вниз до раздела "Иконки приложений и запуск изображений". Для "Источник изображений запуска" щелкните поле и измените его с образа запуска на "Не использовать каталог активов"
- Перейдите в свой app-Info.plist и добавьте следующее (это необработанный текст. Вы также можете использовать текстовый редактор для добавления):
<key>UILaunchImages</key>
<array>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{320, 480}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default</string>
<key>UILaunchImageOrientation</key>
<string>Landscape</string>
<key>UILaunchImageSize</key>
<string>{320, 480}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-568h</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{320, 568}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-568h</string>
<key>UILaunchImageOrientation</key>
<string>Landscape</string>
<key>UILaunchImageSize</key>
<string>{320, 568}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-667h</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{375, 667}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-667h</string>
<key>UILaunchImageOrientation</key>
<string>Landscape</string>
<key>UILaunchImageSize</key>
<string>{375, 667}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-736h</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{414, 736}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-Landscape-736h</string>
<key>UILaunchImageOrientation</key>
<string>Landscape</string>
<key>UILaunchImageSize</key>
<string>{414, 736}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-Portrait</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{768, 1024}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-Landscape</string>
<key>UILaunchImageOrientation</key>
<string>Landscape</string>
<key>UILaunchImageSize</key>
<string>{768, 1024}</string>
</dict>
</array>
- Последний шаг: убедитесь, что ваши изображения iPhone названы в качестве следующих имен, которые я использовал:
[email protected]~iphone.png
[email protected]~iphone.png
[email protected]~iphone.png
По умолчанию ~ iphone.png
[email protected]~iphone.png
Пока Кордова не исправит это, я надеюсь, что этот ответ сэкономит вам много времени: -)
Ответ 6
есть еще одна вероятность этого вопроса.
иногда он не будет автоматически создавать ссылку png для проекта, поэтому даже у вас есть png, проект не знает об этом.
Итак, проверьте свои фазы сборки > Копировать ресурсы пакета
убедитесь, что все png у вас есть в этом списке, если вы что-то пропустили,
добавьте их в "Копировать ресурсы Bundle в фазах сборки", затем запустите приложение еще раз, вы можете увидеть разницу.
![введите описание изображения здесь]()
Ответ 7
Убедитесь, что у вас не есть что-то вроде ниже в вашем файле config.xml
<preference name="SplashScreen" value="screen"/>