Ios 在Objective C的自动布局中使用约束来支持RTL语言

Ios 在Objective C的自动布局中使用约束来支持RTL语言,ios,autolayout,Ios,Autolayout,我在iOS中有一个应用程序,我正在尝试将其本地化为RTL语言。显然,布局需要与语言相一致 首先,我尝试在一个屏幕的底部设置按钮,以便在使用rtl语言区域设置打开应用程序时更改它们的顺序 我使用自动布局,并在按钮和视图之间添加了关于屏幕主视图的尾随/前导水平视图设置的约束,这是我理解应该做的。使用拖放蓝线方法创建约束。此外,根据另一个线程的指示,我在main中使用了以下代码: #if TARGET == TARGET_AR NSUserDefaults * defaults = [

我在iOS中有一个应用程序,我正在尝试将其本地化为RTL语言。显然,布局需要与语言相一致

首先,我尝试在一个屏幕的底部设置按钮,以便在使用rtl语言区域设置打开应用程序时更改它们的顺序

我使用自动布局,并在按钮和视图之间添加了关于屏幕主视图的尾随/前导水平视图设置的约束,这是我理解应该做的。使用拖放蓝线方法创建约束。此外,根据另一个线程的指示,我在main中使用了以下代码:

#if TARGET == TARGET_AR
        NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:[NSArray arrayWithObject:@"ar-SA"] forKey:@"AppleLanguages"];
        [defaults synchronize];
#endif
这仍然不起作用,按钮保持在原来的位置。对如何解决这个问题有什么建议吗


谢谢

我认为正确的方法是为每个区域设置单独的故事板,这样您不仅可以自定义文本方向(RTL或LTR),还可以为各种UI元素使用不同的语言。显然,您需要为每个故事板连接IBOutlets和IBActions,但这将比您所建议的更高效、更容易实现。祝你好运

我不知道您从哪里得到了使用宏来确定区域设置的建议,但这绝对是错误的

您最可能缺少的是一个实际的RTL本地化(使用Base很好!)。在“文件导航器”中选择项目文件,您将看到如下内容:


您需要做的是添加一个实际的RTL本地化。因此,单击使用基本国际化复选框上方的“+”并在弹出菜单中选择阿拉伯语(ab),然后在出现的工作表中继续。如果你在阿拉伯语为首选语言的手机上构建和运行你的应用程序,那么这些限制应该会如你所期望的那样改变

为什么不使用其他故事板、用于RTL和LTR的XIB文件呢?我认为基本国际化很好(比如,如果我想在UI中添加新内容,我不需要检查所有的故事板)。这不是真的吗?请发布更多关于您的视图层次结构和实际约束的信息。重做所有的出口和操作听起来效率很低。这不是最好的办法。