Поворот заставки не работает в ландшафтном режиме на устройствах 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

Другие вопросы по тегам