ios 7 - 强制视图布局翻转到RTL而无需更改语言

时间:2014-12-29 08:42:23

标签: ios xcode

我的应用程序中有一些视图需要能够同时显示LTR和RTL内容(不是同时显示),并且它必须与常规应用程序布局方向无关。意思是,我希望能够在不改变系统语言的情况下,通过动态告诉特定视图将其布局从LTR翻转到RTL,反之亦然。
我对此进行了相当多的研究,但除了以下两种解决方案外,似乎不可能:
Flip layout on iPhone for RTL languages
How to force "Respect Language Direction" from RTL to LTR and vice versa

第一种解决方案与我的情况无关。第二个解决方案让我想到为每个视图保留两个版本,一个用于RTL,一个用于LTR,并且动态使用相关的版本。这意味着我将不得不在每次UI更新时更新两次视图
当然,第三种解决方案是在显示视图之前,根据相关方向以编程方式手动更改视图的布局。

那么,这是我唯一的选择吗?
P.S:我只谈论布局,而不是本地化字符串,因为我自己正在处理正确的文本。

2 个答案:

答案 0 :(得分:13)

我发现它很容易实现,只是:

func setRTL(_ sender: UIButton) {
    UIView.appearance().semanticContentAttribute = .forceRightToLeft
    UINavigationBar.appearance().semanticContentAttribute = .forceRightToLeft
    if let vc = storyboard?.instantiateViewController(withIdentifier: "root") {
        UIApplication.shared.keyWindow?.rootViewController = vc
    }
}

预览:

并查看完整的DEMO

答案 1 :(得分:2)

从iOS 9开始,您现在可以使用UIView的{​​{1}}属性在每个视图的基础上执行此操作。如果您正在使用自动布局,或者您的控件是/从UIKit继承,那么只要设置了此属性,它们就应该做正确的事情。

请注意,对于标签,文本字段和视图,您可能还需要根据要显示的文本更改文本对齐方式。