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

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

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

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

#if TARGET == TARGET_AR NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:[NSArray arrayWithObject:@"ar-SA"] forKey:@"AppleLanguages"]; [defaults synchronize]; #endif 

这仍然不起作用,按钮保持原样。 有关如何解决这个问题的任何建议?

谢谢

我不知道你在哪里建议使用宏来确定语言环境,但这绝对是错误的。

您最有可能缺少的是实际的RTL本地化(您使用Base非常棒!)。 在文件导航器中选择您的项目文件,您应该看到如下内容:

您需要做的是添加实际的RTL本地化。 因此,单击Use Base Internationalization复选框上方的“+”,然后在弹出菜单中选择Arabic(ab) ,然后在出现的工作表中继续。 如果您在阿拉伯语是首选语言的手机上构建和运行您的应用程序,那么约束应该按照您的预期翻转!

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