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

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

当用户select他或她的设备手机语言时,该应用可以完美地切换RTL和LTR语言。 所有的文本都是本地化的,语言方向正在工作。

我也有一个应用程序内的button,以改变它的语言,而无需重新启动应用程序。 这也很好,所有的文本正在被取代。

问题是,当用户从应用程序内更改语言时,我预先定义的约束条件中的“尊重语言方向”选项具有讽刺意味,不受尊重。

有任何想法吗?

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

我无法find强制更改RTL – LTR自动布局约束的方法,所以我决定为每个语言方向复制2个附加的故事板。 所以,实际上我的应用程序现在包含3个故事板 – Main.storyboard,StoryboardRTL.storyboard和StoryboardLTR.storyboard。

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

当用户select更改为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布局适当的故事板。 当用户重新启动应用程序时,所选的语言已经设置,并显示主故事版,所有正确的布局根据选定的语言。