2015-07-29 5 views
19

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

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

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

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

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

и это скриншот при компиляции с Xcode 6. enter image description here

+0

Вы пробовали ответы в этом сообщении? –

ответ

6

Там нет простого способа. Рекомендуется переходить на стандартный API как можно более долгосрочный.

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

+0

У меня проблема с записями UITextField. он по-прежнему показывает справа налево. Я попытался изменить: UITextField.appearance(). semanticContentAttribute и UITextField.appearance(). UITextField.appearance(). makeTextWritingDirectionLeftToRight (ноль) но бесполезно – iosMentalist

22

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

Добавьте это в делегат делегата, сделанный методомFinishLaunchingWithOptions.

[[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight]; 

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

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

[[UIView Alloc] инициализации] вместо [UIView внешний вид], потому что respondsToSelector в настоящее время не работает с [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]; 
    } 
+0

Это конфигурация не поддерживается и приведет к несколько ошибок и несоответствий в вашем приложении. – wakachamo

+0

Да, это может быть так, но это единственное, что работает до сих пор для навигационных контроллеров, чтобы они оставили их вправо, насколько я знаю. Для отдельных элементов semanticContentAttribute работает лучше всего, как вы описали. –

+0

Спасибо, ребята! Я нашел более простое решение для моего дела. Пожалуйста, см. Мой ответ. –

11

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

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

Jus заменить UIView с UINavigationBar в @ ответ Камран в. то код будет выглядеть следующим образом.

#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 отлично работает ...

+1

идеальный ответ для навигационной панели – Mehul

+0

Спасибо, этот ответ работает на мой вопрос https://stackoverflow.com/questions/45736141/position-of-navigation-buttons-in-rtl-languages-are-not-correct-in-ipad? Noredirect = 1 # comment78460346_45736141 –

16

я нашел правильный путь от Apple, форумы разработчиков

здесь iOS 9 beta - UIAlertController is not working

просто добавить этот код, чтобы сделать 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]; 



} 
+0

Спасибо, человек ... Itz хорошо работает ... –

+0

Он не работает правильно http://stackoverflow.com/questions/32932463/rtl-language-behavior-in-ios-9 –

5

СВИФТ 2 Код

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

Для SWIFT 3

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

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

Semantic-> Force влево-вправо.

Force Left-to-Right

Смежные вопросы