即时从左到右更改整个应用程序,反之亦然

问题描述 投票:0回答:3

我正在创建一个英语和阿拉伯语的应用程序。我正在使用自己的本地化系统,因为我希望允许用户在应用程序内以及应用程序运行时自行切换语言(我不知道如何执行此官方 Apple 方式)。当用户选择阿拉伯语时,我想将整个应用程序切换为从右到左,即切换尾随和前导、文本对齐等。

这可能吗?

编辑:我的目标是 iOS 7+

ios localization
3个回答
1
投票

如果您需要将应用程序的方向更改为 LTR 和 RTL 那么您可以使用该解决方案。

//FOR RIGHT TO LEFT
 UIView.appearance().semanticContentAttribute = .forceRightToLeft

//FOR LEFT TO RIGHT
 UIView.appearance().semanticContentAttribute = .forceLeftToRight

希望这能解决您的问题。

参考:https://stackoverflow.com/a/48963618/8809657


0
投票

是的,这是可能的。据我了解,您希望将所有组件移至另一侧,并且文本应该从右侧书写,对吗?

首先,您必须将语言设置为用户默认值中的“AppleLanguage”键:

NSUserDefaults.setObject(["ar"], forKey: "AppleLanguage")

那么你必须使用自动布局。默认情况下,自动布局会根据所选语言检测区域,并且当您正确设置前导和尾随空格时,它会更改文本字段的位置。如果您希望某些组件保持在同一位置,则必须使用“left”而不是“leading”。


0
投票

我认为现在回答这个问题已经太晚了,但今天我面临这个问题,最后我找到了一个在运行时像魅力一样有效的解决方案。

在我的情况下,当用户从应用程序设置(应用程序内部而不是操作系统设置)更改应用程序语言时,我会立即将语言代码保存在用户默认值中,并寻找适合所选语言的方向。

我正在使用

changeApplicationLayoutDirection()
函数在运行时更新布局方向

func changeApplicationLayoutDirection() {
    
    // Change app direction
    let language = UserDefaults.shared.string(forKey: .appLanguage)
    
    let direction: UISemanticContentAttribute = (language.contains("ar") || language.contains("he")) ? .forceRightToLeft : .forceLeftToRight
    
    UIView.appearance().semanticContentAttribute = direction
    UIButton.appearance().semanticContentAttribute = direction
    UITextView.appearance().semanticContentAttribute = direction
    UITextField.appearance().semanticContentAttribute = direction
}

然后通过调用

window.rootViewController = MyTabbarController
来强制重新加载整个 VC 来加载整个 tabbarController

注意:在重新加载之前请注意 viewController 观察者。

最后一步是在

changeApplicationLayoutDirection()
末尾调用
didFinishLaunchingWithOptions
,然后使 rootVC 在 AppDelegate 类中可见,以便在下次应用程序启动时准备正确的布局方向。

© www.soinside.com 2019 - 2024. All rights reserved.