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
语义 – >强制从左到右。