如何强制"尊重语言方向"从 RTL 到 LTR,反之亦然



我有一个使用自动布局的应用程序。

当用户选择他或她的设备电话语言时,应用程序完美地切换RTL和LTR语言。所有的文本都是本地化的,语言方向是有效的。

我也有一个按钮内的应用程序,改变它的语言,而无需重新启动应用程序。这也很有效,所有的文本都被替换了。

问题是,当用户从应用程序内更改语言时,"尊重语言方向"选项在我预定义的约束中是不受尊重的。

任何想法?

最终,我设法解决了这个问题。

我找不到一种方法来强制改变RTL - LTR自动布局约束,所以我决定为每个语言方向复制2个额外的故事板。实际上,我的app现在包含3个storyboard - Main。故事板,StoryboardRTL。故事板和故事板dltr .storyboard.

Main处理从iDevice上的设置执行时语言方向的更改,RTL/LTR is有自己的方向,以支持从应用程序内部更改应用程序语言。

当用户选择更改为RTL语言时,我在UserDefaults中设置所选语言:

    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"he", nil] forKey:@"AppleLanguages"];
    [[NSUserDefaults standardUserDefaults] synchronize];

以及在调用我在AppDelegate中编写的方法之后,它会根据语言布局改变故事板。

- (void)reloadStoryboard
{
    UIStoryboard *storyboard;
    switch ([AALanguageManager getCurrentLanguage]) {
        case CurrentLanguageRTL:
            storyboard = [UIStoryboard storyboardWithName:@"StoryboardRTL" bundle:[NSBundle mainBundle]];
            break;
        default:
            storyboard = [UIStoryboard storyboardWithName:@"StoryboardLTR" bundle:[NSBundle mainBundle]];
            break;
    }
    self.window.rootViewController = [storyboard instantiateInitialViewController];
    [self.window makeKeyAndVisible];
}

这看起来就像重新启动了应用程序,并显示了正确的故事板与RTL/LTR布局。当用户重新启动应用程序时,所选语言已经设置好,并显示主故事板,并根据所选语言进行正确的布局。

最新更新