Подтвердить что ты не робот

IOS 9 отключить поддержку права на левый язык

Приложение My iOS доступно только на арабском языке (справа налево). До IOS 9 макеты представлений и анимация просмотра были по умолчанию слева направо. Итак, я настроил полное приложение и изменил поведение по умолчанию, например. назад на панели навигации была установлена ​​справа, а не по умолчанию.

Но теперь, когда приложение скомпилировано с использованием последнего SDK (Xcode 7 beta 4), все противоположно тому, что мне нужно.

Есть ли какой-либо простой способ заставить приложение отображать представления и вести себя как iOS 8 и 7?

Я искал и нашел решение, но оно связано с изменением ограничений (Снимите флажок "Уважение языка" ) для всех просмотров. Но это не приемлемое решение в крупных проектах.

Это скриншот после компиляции с Xcode 7 beta 4. .

и это скриншот при компиляции с Xcode 6. введите описание изображения здесь

4b9b3361

Ответ 1

Изменить: Следующий код может вызвать неожиданное поведение, как указывал @wakachamo. Поэтому, пожалуйста, обратите внимание на проблемы, например. Интерактивный позыв не работает, предупреждения не отображаются и т.д. Лучше следовать инструкциям, предоставленным @wakachamo, если это не работает для вас.

Добавьте это в метод делегирования делегата didFinishLaunchingWithOptions.

[[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];

Также добавьте защиту для поддержки более ранней версии, чтобы свойство не вызывало сбоя.

if([[[UIView alloc] init] respondsToSelector:@selector(setSemanticContentAttribute:)]) {
        [[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
    }

[[UIView alloc] init] вместо [Внешний вид UIView], потому что responsesToSelector в настоящее время не работает с [Внешний вид UIView] для setSemanticContentAttribute. Вы также можете добавить iOS 9 Check

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
        [[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
    }

Ответ 2

Я нашел правильный путь от Форумы разработчиков Apple.

здесь iOS 9 beta - UIAlertController не работает

просто добавьте этот код, чтобы заставить alertview работать с ним

 if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
            [[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];

    [[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setSemanticContentAttribute:UISemanticContentAttributeUnspecified];
    [[UIView appearanceWhenContainedIn:[UIAlertView class], nil] setSemanticContentAttribute:UISemanticContentAttributeUnspecified];



}

Ответ 3

Я знаю, что слишком поздно ответить. Но я понял это (только проблема с навигационной панелью).

Ответ адаптирован из @Kamran Kan. Спасибо @Kamran.

Jus замените UIView на UINavigationBar в ответе @Kamran. то код будет следующим.

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
    [[UINavigationBar appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
}

Так как это только действие UINavigationBar, другие элементы управления не будут влиять. Итак, UIAlertView отлично работает...

Ответ 4

Нет простого способа. Он рекомендовал вам перейти на стандартный API как можно более долгосрочный.

Другим подходом является установка semanticContentAttribute всех затронутых представлений на UISemanticContentAttributeForceLeftToRight, но это так же возможно, как установка всех ваших ограничений на использование Left/Right вместо Leading/Trailing. В дополнение к этому вам также придется заблокировать эти вызовы по проверке доступности, если вы настроите iOS < 9.

Ответ 5

SWIFT 2 Код

if #available(iOS 9.0, *) {
     myView.semanticContentAttribute = .ForceLeftToRight
}

Ответ 6

Для SWIFT 3

if #available(iOS 10.0, *) {
     UIView.appearance().semanticContentAttribute = .forceLeftToRight
}

Ответ 7

Используйте Storyboard и выберите для каждого конкретного контроллера вида

Семантика- > Сила влево-вправо.

Сила влево-вправо