iOS 9禁用从右到左语言的支持

我的iOS应用程序只有阿拉伯语(从右到左)的语言。 在iOS 9之前,视图布局和视图animation默认为从左到右。 所以,我已经定制完整的应用程序,并已经扭转了默认行为,例如导航栏中的后退button被设置为在右侧而不是默认左侧。

但现在,当使用最新的SDK(Xcode 7 beta 4)编译应用程序时,一切与我所需要的相反。

有没有简单的方法来强制应用程序显示视图和行为像iOS 8和7?

我search并find了一个解决scheme,但它涉及到所有视图的约束(取消select“尊重语言方向”)。 但在大型项目中这不是一个可行的解决scheme。

这是与Xcode 7 beta 4编译后的屏幕截图。 。

这是使用Xcode 6编译时的屏幕截图。 在这里输入图像说明

编辑:下面的代码可能会导致意外的行为@wakachamo指出。 因此,请注意问题,如交互式stream行手势不起作用,alertviews不显示等。如果这不适合您,最好遵循@wakachamo提供的说明

将此添加到应用程序委托didFinishLaunchingWithOptions方法。

[[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight]; 

还要加上警惕支持早期版本,以便该属性不会导致任何崩溃。

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

[[UIView alloc] init]而不是[UIView外观],因为respondsToSelector当前没有针对setSemanticContentAttribute的[UIView外观]。 您也可以添加iOS 9检查

 #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]; } 

我从苹果开发者论坛find了正确的方法

这里iOS 9testing版 – 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]; } 

我知道它太迟回答。 但我已经知道了(只有导航栏问题)。

答案改编自@Kamran Kan。谢谢@Kamran。

Jus在@ Kamran的答案中用UINavigationBarreplaceUIView 。 那么代码将如下所示。

 #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工作正常…

没有简单的方法。 build议您尽可能长时间迁移到标准API。

另一种方法是将所有受影响的视图的semanticContentAttribute设置为UISemanticContentAttributeForceLeftToRight ,但这与将所有约束设置为使用左/右而不是前导/尾随一样可行。 除此之外,如果您定位到iOS <9,则还必须围绕可用性检查select这些电话。

SWIFT 2代码

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

对于SWIFT 3

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

使用Storyboard并为每个特定的视图控制器select

语义 – >强制从左到右。

强制从左到右