IOS 9 отключить поддержку права на левый язык
Приложение My iOS доступно только на арабском языке (справа налево). До IOS 9 макеты представлений и анимация просмотра были по умолчанию слева направо. Итак, я настроил полное приложение и изменил поведение по умолчанию, например. назад на панели навигации была установлена справа, а не по умолчанию.
Но теперь, когда приложение скомпилировано с использованием последнего SDK (Xcode 7 beta 4), все противоположно тому, что мне нужно.
Есть ли какой-либо простой способ заставить приложение отображать представления и вести себя как iOS 8 и 7?
Я искал и нашел решение, но оно связано с изменением ограничений (Снимите флажок "Уважение языка" ) для всех просмотров. Но это не приемлемое решение в крупных проектах.
Это скриншот после компиляции с Xcode 7 beta 4.
![.]()
и это скриншот при компиляции с Xcode 6.
![введите описание изображения здесь]()
Ответы
Ответ 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 и выберите для каждого конкретного контроллера вида
Семантика- > Сила влево-вправо.
![Сила влево-вправо]()