Localization iOS9 RTL语言的强制LTR UINavigationController推送方向

Localization iOS9 RTL语言的强制LTR UINavigationController推送方向,localization,uinavigationcontroller,ios9,xcode7,right-to-left,Localization,Uinavigationcontroller,Ios9,Xcode7,Right To Left,我在开发一个旧的应用程序时遇到了这个问题,该应用程序使用RTL编写的阿拉伯语进行本地化。我注意到在iOS9中,我的UINavigationController在按下视图控制器时从右向左显示动画。我的应用程序视图还没有准备好。即使在阿拉伯语故事板中,它们也是为从左到右的转换而设计的(因为以前在较旧的iOS中,UINavigationController只支持LTR转换)。现在这个RTL动画需要我重新设计很多资源,所以我想强制它显示所有语言的LTR动画。经过一番研究,我找到了解决方案。在iOS9中,

我在开发一个旧的应用程序时遇到了这个问题,该应用程序使用RTL编写的阿拉伯语进行本地化。我注意到在iOS9中,我的UINavigationController在按下视图控制器时从右向左显示动画。我的应用程序视图还没有准备好。即使在阿拉伯语故事板中,它们也是为从左到右的转换而设计的(因为以前在较旧的iOS中,UINavigationController只支持LTR转换)。现在这个RTL动画需要我重新设计很多资源,所以我想强制它显示所有语言的LTR动画。经过一番研究,我找到了解决方案。

在iOS9中,有一个新的常量
UISemanticContentAttributeForceLeftToRight
。以下代码修复了该问题并强制执行从左到右的动画:

if(([[NSProcessInfo processInfo] respondsToSelector:@selector(isOperatingSystemAtLeastVersion:)]) &&
    [[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){9, 0, 0}]) {
    [[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
}
我们首先检查iOS版本,以避免iOS版本早于9的错误。
我在我的基本ViewController类的
ViewDidLoad
中添加了上述代码(我的所有ViewController类都继承自此类)。

因为它只发生在你的应用程序代理中的
iOS 9
上,请编写以下内容:

if #available(iOS 9.0, *) {
    UIView.appearance().semanticContentAttribute = .ForceLeftToRight
} else {
    // Fallback on earlier versions
};

这只是为了分享,因为我在搜索期间没有找到主题。我已经回答了下面的问题。我已经将此代码放入appdelegate didfinishlaunchingwithoptions,它适用于所有ViewController。非常感谢。