Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为iOS创建从右到左的用户界面_Ios_Objective C_Iphone_Xcode - Fatal编程技术网

为iOS创建从右到左的用户界面

为iOS创建从右到左的用户界面,ios,objective-c,iphone,xcode,Ios,Objective C,Iphone,Xcode,按照苹果的说法 “iOS不会自动镜像控件,因此,如果您希望iOS应用程序具有这种行为,请对控件进行子类化,并覆盖绘图方法。” 当用户在主屏幕中选择阿拉伯语或希伯来语时,我想镜像我的整个UI。我在搜索同样的教程和文档,但没有任何帮助 请查找我迄今为止所做的工作: 我使用的是Xcode 6.1,应用的目标是从iOS 7到iOS 8.1。 自动布局已启用,并且未使用左或右约束。我只使用前导或尾随约束。 在项目设置中启用了基础国际化,并且在本地化中添加了语言。但是,当我在设备中运行应用程序并将设备语言和

按照苹果的说法 “iOS不会自动镜像控件,因此,如果您希望iOS应用程序具有这种行为,请对控件进行子类化,并覆盖绘图方法。”

当用户在主屏幕中选择阿拉伯语或希伯来语时,我想镜像我的整个UI。我在搜索同样的教程和文档,但没有任何帮助

请查找我迄今为止所做的工作: 我使用的是Xcode 6.1,应用的目标是从iOS 7到iOS 8.1。 自动布局已启用,并且未使用左或右约束。我只使用前导或尾随约束。 在项目设置中启用了基础国际化,并且在本地化中添加了语言。但是,当我在设备中运行应用程序并将设备语言和区域设置为阿拉伯语时,我无法获得镜像UI。我是否必须在代码中执行任何操作才能获得镜像UI? 支持基于RTL的UI的最佳方式是什么?如何子类化控件和重写绘图方法


请使用获取我的应用程序的示例屏幕截图。

我刚刚从苹果文档中找到了一种简单的方法,而不是使用两个RTL和LTR语言的故事板

  • 首先,在项目设置中启用基础国际化
  • 添加您的语言-在我的例子中,我添加了阿拉伯语和希伯来语
  • xCode将本地化您的故事板,您可以看到不同语言的不同故事板字符串
  • 在新创建的字符串文件中更改标签的文本。在我的例子中,我更改了阿拉伯语和希伯来语字符串文件
  • 使用AutoLayout设计整个UI
  • 不要使用左约束或右约束。而不是只使用前导约束和尾随约束
  • 在主函数中添加以下代码,并在模拟器中运行应用程序
  • 您的应用程序现在可以使用带有镜像UI的RTL语言,而不需要两个故事板。 注意:如果未正确设置自动布局约束,则无法正常工作。但是,由于新屏幕的出现,您必须学会使用自动布局。

    在Swift中

    let languages = ["ar"]
    UserDefaults.standard.set(languages, forKey: "AppleLanguages")
    

    为什么不尝试在故事板中使用两个不同的视图,并附加相同的IBOutlet?把你需要的场景放在语言之上。我只是把它作为最后一个选项,因为我有将近43个屏幕,对于iPhone6 plus,我也计划有不同的故事板。我只是想知道,为什么苹果没有明确的文档说明,而os x应用程序可以毫不费力地镜像:(在这种情况下,您需要通过代码库管理所有约束。@Mrunal您的意思是我必须管理代码中的所有约束,并且当用户选择阿拉伯语时,我必须更改约束,以便获得镜像的UI?是的,如果我将左约束从10更改为250,我的uilabel将移动到右对齐。但这非常重要。)tic,不是很好的解决方案。@Jitendra问题出在哪里?请详细解释我想将所有UI移到左侧所有UI都不可能用上述答案。它只能移动标签和文本。对于UI控件,您必须自定义并重新绘制控件。例如,如果您想让UISegmentedControl切换RTL,则必须自定义控件。查看我问题中的链接。我想更改我应用程序中的语言。(不是整个设备语言)。根据语言选择,我已在“AppleLanguages”中设置语言代码值NSUserDefaults。但是我如何刷新UI?@VivekShah您必须为此强制重新加载窗口根视图控制器。对于此解决方案的工作原理,这个答案可能会受益于一些额外的上下文/解释。
    let languages = ["ar"]
    UserDefaults.standard.set(languages, forKey: "AppleLanguages")