IPhone 5 не отображается правильно - Phonegap
Я обновляю iOS-приложение PhoneGap, чтобы сделать его совместимым с iPhone 5.
Я вручную скрываю заставку после инициализации моего приложения.
При имитации iPhone 5: при запуске приложения отображается правильный заставку (по умолчанию [email protected]) (здесь "5" ), но быстро скрывает его и вместо этого отображает экран заставки iPhone 4 (в данном случае "4" ). 4 не распространяется на все приложение, таким образом отображая верхнюю и нижнюю строки инициализации приложения.
Я не совсем уверен, как это работает, но я могу представить два возможных сценария:
1) Оба изображения отображаются одновременно, но по какой-то причине 5 авто скрываются, пока 4 ждут вызова из приложения, чтобы скрыть.
2) В какой-то момент, когда отключение ручного скрытия экрана заставки затвора отключает "истинный" всплывающий экран для "поддельного", который отображается до тех пор, пока вызов javascript из приложения и телефонного звонка не будет отображаться правильно после этого переключателя.
Кто-нибудь еще столкнулся и/или решил это?
UPDATE:
Попробовал удалить и добавить все всплески изображения снова, но безрезультатно. Я попытался удалить меньшие изображения (4 и его версию без сетчатки), но даже без меньших, присутствующих в любом месте проекта, я получаю ту же ошибку!
ОБНОВЛЕНИЕ 2:
В настоящее время выпущена версия Cordova 2.2.0, тем самым устраняя эту проблему в соответствии с: http://shazronatadobe.wordpress.com/2012/10/27/whats-new-in-cordova-ios-2-2-0/
Таким образом, рекомендуемым решением является обновление вашего приложения для использования Cordova 2.2.0, если это по какой-то причине невозможно, решения предоставляются ниже.
Ответы
Ответ 1
Я получил два ответа в другом месте, но еще не успел проверить их:
От пользователя T123 в группе Google Phonegap Phonegap:
открыть CDVViewController.m - find - (void) showSplashScreen
изменить строку: 690
От:
else // not iPad
{
orientedLaunchImageFile = launchImageFile;
}
To:
else // not iPad
{
orientedLaunchImageFile = launchImageFile;
/* Edited for 4-inch IP5 */
if(screenBounds.size.height == 568)
orientedLaunchImageFile = [NSString stringWithFormat:@"%@-568h", launchImageFile];
}
И от Бриона, который прокомментировал выше, следующий запрос на тягу, хохотрый, чтобы быть включенным в Кордову 2.2.0: https://github.com/apache/incubator-cordova-ios/pull/50 p >
EDIT: испробовал решение T123, и он работает для меня!
EDIT2: исправление Brion было включено в Cordova 2.2.0, который теперь выпущен!
EDIT3: просто обновление, чтобы выделить комментарий для тех, кто не удосуживается их прочитать:
Для Phonegap версии 1.4.1 мне удалось заставить Hessius исправить работу следующим образом: я скопировал методы showSplashScreen, isIPad, resolveImageResource и определение #define degreesToRadian (x) (M_PI * (x)/180.0) из файл PGViewController.m в файл MainViewController.m. После этого XCode жаловался, что я присваиваю значения атрибутам только для чтения, поэтому я редактировал файл заголовка в PhoneGap.framework, чтобы эти два атрибута readwrite. Я также сменил launchImageFilefrom код Hessius на @ "Default". Это помогло мне. - Joe Dyndale Oct 8 '12 в 15:23
Ответ 2
Исправление для этого (https://issues.apache.org/jira/browse/CB-1482) не указано до 2.2. Очень рискованно использовать нестабильную версию, и я не собираюсь скомпилировать ее из исходного кода, поэтому я попробовал следующий хак:
В MainViewController.m
- (void) showSplashScreen
{
CGRect screenBounds = [[UIScreen mainScreen] bounds];
// HACK: PhoneGap pre-2.2 does not support iphone5 splash image well, so we just skip it
if (screenBounds.size.height == 568) {
return;
}
[super showSplashScreen];
}
Это отключит showSplashScreen для iPhone5, чтобы избежать более короткого изображения запуска, добавленного PhoneGap (начальный образ запуска iOS отображается хорошо). Это сработало для меня, и я почти не заметил никакой разницы, взломав showSplashScreen для iPhone5.
Ответ 3
Белый мерцание
У меня была такая же проблема с Cordova 2.2. Я думаю, стоит упомянуть, что мне пришлось сделать дополнительный шаг, чтобы правильно отобразить экран заставки.
Я внес изменения, которые были включены в ответ @Hessius. Но я заметил, что после появления заставки появился белый экран.
В способе showvplashScreen (void) другие могут видеть
if (launchImageFile == nil) { // fallback if no launch image was specified
// if (CDV_IsIPhone5()) {
// // iPhone 5 or iPod Touch 6th-gen
// launchImageFile = @"Default-568h";
// } else {
launchImageFile = @"Default";
// }
}
Комментируя код (или удаляющий) код, который я прокомментировал, удалил белое мерцание, которое я видел между загрузкой приложения и экраном запуска.
Надеюсь, это поможет кому-то!