Поворот заставки не работает в ландшафтном режиме на устройствах iOS
Я взял на себя проект с использованием AngularJS, Ionic и Bootstrap для создания гибридных приложений для мобильных устройств.
До обновления до XCode 7 все прошло хорошо. Я обновил свой HTML-, CSS- и JS-код в редакторе, запустил grunt run:ios
создать код платформы и открыть XCode. Оттуда я создал.ipa-файл без каких-либо проблем (только с некоторыми предупреждениями, которые можно игнорировать).
Однако, поскольку используется XCode 7 (необходим для устройств iOS 8 и iOS 9), экранная заставка будет отображаться неправильно. Значение: в портретном режиме.
Примечание № 1: заставка и приложение должны быть только в альбомной ориентации.
Примечание № 2: при запуске grunt run:android
На Android-устройстве все хорошо.
В соответствии с 34919547 я обновил плагин cordova-plugin-splashscreen до версии 3.1.0, как предлагается здесь. Я также изменил ссылку, так как старая версия была жестко запрограммирована в config-файле.
Теперь сначала заставка по ошибке отображается в режиме Portraid, а затем (после заданного времени ожидания) в режиме Landscape, как и должно быть. Так что дела идут немного лучше, но не на 100%.
Как получить заставку, отображаемую полностью в ландшафтном режиме?
1 ответ
Вы пытались отменить эту строку кода?
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
SEL originalSelector = @selector(shouldAutorotate);
SEL swizzledSelector = @selector(splash_shouldAutorotate);
Method originalMethod = class_getInstanceMethod(class, originalSelector);
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
BOOL didAddMethod = class_addMethod(class,
originalSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(class,
swizzledSelector,
method_getImplementation(originalMethod),
method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
});
}
Попробуйте отменить это так:
{
/*
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
SEL originalSelector = @selector(shouldAutorotate);
SEL swizzledSelector = @selector(splash_shouldAutorotate);
Method originalMethod = class_getInstanceMethod(class, originalSelector);
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
BOOL didAddMethod = class_addMethod(class,
originalSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(class,
swizzledSelector,
method_getImplementation(originalMethod),
method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
});
*/
}
Вы можете найти это в: cordova-plugin-splashscreen/src/ios/CDVViewController+SplashScreen.m