Проблемы с заставкой 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>
  1. Последний шаг: убедитесь, что ваши изображения 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"/>