iOS9 为 RTL 语言强制 LTR UINavigationController 推送方向
iOS9 force LTR UINavigationController Push Direction for RTL Languages
我在开发一个旧应用程序时遇到了这个问题,该应用程序对阿拉伯语进行了本地化,写成 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 class 的 ViewDidLoad
中添加了上面的代码(我所有的 ViewController class 都继承自这个)。
因为它只发生在 iOS 9
上,在您的应用委托中写下以下内容:
if #available(iOS 9.0, *) {
UIView.appearance().semanticContentAttribute = .ForceLeftToRight
} else {
// Fallback on earlier versions
};
我在开发一个旧应用程序时遇到了这个问题,该应用程序对阿拉伯语进行了本地化,写成 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 class 的 ViewDidLoad
中添加了上面的代码(我所有的 ViewController class 都继承自这个)。
因为它只发生在 iOS 9
上,在您的应用委托中写下以下内容:
if #available(iOS 9.0, *) {
UIView.appearance().semanticContentAttribute = .ForceLeftToRight
} else {
// Fallback on earlier versions
};