我的应用程序中有一些视图需要能够显示LTR和RTL内容(不是同时显示),并且它必须与常规应用程序布局方向无关.意思是,我希望能够在不改变系统语言的情况下告诉特定视图将其布局从LTR翻转到RTL,反之亦然.
我对此进行了相当多的研究,但除了以下两种解决方案之外,似乎不可能:
在iPhone上翻转RTL语言的布局
如何强制从RTL到LTR的"尊重语言方向",反之亦然
第一种解决方案与我的情况无关.第二个解决方案让我想到为每个视图保留两个版本,一个用于RTL,一个用于LTR,并且动态使用相关的版本.这意味着我将不得不在每次UI更新时更新两次视图.
当然,第三种解决方案是在显示视图之前,根据相关方向以编程方式手动更改视图的布局.
那么,这些是我唯一的选择吗?
PS:我只谈论布局,而不是本地化字符串,因为我自己正在处理正确的文本.
Say*_*iss 14
我发现实现它很容易,只是:
func setRTL(_ sender: UIButton) {
UIView.appearance().semanticContentAttribute = .forceRightToLeft
UINavigationBar.appearance().semanticContentAttribute = .forceRightToLeft
if let vc = storyboard?.instantiateViewController(withIdentifier: "root") {
UIApplication.shared.keyWindow?.rootViewController = vc
}
}
Run Code Online (Sandbox Code Playgroud)
预习:

并查看完整的DEMO.
从 iOS 9 开始,您现在可以使用 的属性在每个视图的基础上执行此UIView操作semanticContentAttribute。如果您使用自动布局或者您的控件是/继承自 UIKit,那么只要设置此属性,它们就应该执行正确的操作。
请注意,对于标签、文本字段和视图,您可能还需要根据所显示的文本更改文本对齐方式。
| 归档时间: |
|
| 查看次数: |
5318 次 |
| 最近记录: |