iOS 9 охота сил л UINavigationController продавить направление для RTL языков


Я столкнулся с этой проблемой, когда работал над старым приложением, которое имело локализацию для арабского языка, который написан RTL. Я заметил, что в iOS9 мой UINavigationController показывал анимацию справа налево при нажатии контроллеров вида. Мои представления приложений не были готовы к этому. Они были разработаны для перехода слева направо даже в арабской раскадровке (потому что ранее в более старой iOS UINavigationController поддерживал только LTR-переход). Теперь эта RTL анимация требовала, чтобы я редизайн многих активов, поэтому я хотел заставить его показывать анимацию LTR для всех языков. После небольшого исследования я нашел решение.

2 2

2 ответа:

В iOS9 для этой цели существует новая Константа UISemanticContentAttributeForceLeftToRight. Следующий код исправляет проблему и заставляет анимацию слева направо:

if(([[NSProcessInfo processInfo] respondsToSelector:@selector(isOperatingSystemAtLeastVersion:)]) &&
    [[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){9, 0, 0}]) {
    [[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
}

Мы проверяем версию iOS в первую очередь, чтобы избежать ошибок в версии iOS старше 9. Я добавил приведенный выше код в ViewDidLoadмоего базового класса ViewController (все мои классы ViewController наследуют от этого).

Так как это происходит только на iOS 9 в вашем делегате приложения напишите следующее:

if #available(iOS 9.0, *) {
    UIView.appearance().semanticContentAttribute = .ForceLeftToRight
} else {
    // Fallback on earlier versions
};