2015-11-13 140 views
1

我在放置子视图时出现了问题,该视图与我的视图距离后端的百分比距离。它在正常的从左到右的语言(如英语)中工作良好,但是当我本地化为从右到左的语言(如阿拉伯语或希伯来语)时,约束似乎为零,并直接针对后端(在这种情况下是左侧)。我创建了一个最小的测试项目,并能够在那里重现问题。从右到左语言的Autolayout基于百分比的放置

我所有的视图都是在xib文件中设置的,而不是在storyboard中。

我用xib创建了一个ViewController。然后我把一个固定大小的50×50子视图,并把它放在一个固定的100,从顶部,然后后缘80%的上海华的尾部,如在此屏幕截图:

Autolayout Setup

刚刚好测量,并确保它翻转视图,我添加了一个完全独立于其他子视图的标签。当我用英语运行它,一切看起来不错:

LTR Correct Layout

然而,在改变设备的语言为阿拉伯语,标签正确反映,但它似乎忘了结尾约束的百分比,只是看到不断为0,这会导致子视图直接放置在视图的一侧。

RTL Bad Layout

有谁知道我需要如何修改我的约束,以使设备记住基于百分比的约束后缘在RTL语言?

+0

您所选约束的常量似乎为'0'...您是否尝试将此更新为非零值并查看LTR和RTL语言的结果? – wakachamo

+0

@wakachamo常量不是问题。问题似乎是坐标系不会随约束条件一起翻转。这意味着“80%的右边缘”约束(例如320的80%)被翻转并且现在是“左边缘的80%”约束(例如0的80%)。 – Stonz2

+0

正确。坐标系不翻转,并且320的x位置仍然以右至左语言朝向屏幕的右边缘。我不确定这里可以做些什么,除了将你的约束改写成不依赖于绝对位置百分比的集合...... – wakachamo

回答

0

发现问题 - 事实证明问题是,当自动布局约束翻转方向时,坐标系确实不是而是。这意味着标准的LTR约束将后沿放置在右边缘坐标值的80%处(这等于视图的宽度)。但是,当对RTL语言翻转视图约束时,它现在是左边缘坐标值的80%,现在为0.

不幸的是,似乎并没有简单的解决方案。我尝试将视图放置在相对于视图中心的百分比处。再一次,它在LTR中工作正常,但是当切换到RTL时,它在视图的右侧保持完全相同的位置(所以它不能正确反射)。 TBH,我不确定任何基于百分比的约束在不居中的LTR和RTL中是如何工作的。

现在的解决方案是基于适当的范例在运行时设置约束。所以在LTR中,我将它设置在中心坐标的大约150%处,但是如果它是RTL,我会减少大约50%。

+0

请在[bugreport.apple.com](http://bugreport.apple.com)上提交错误报告, – wakachamo

1

如果您的目标是iOS 9或更高版本,则可以使用布局指南(UILayoutGuide)来设置间距。基本上,使视图的后缘紧靠布局指南的前缘,布局指南的后缘紧靠超视图的后缘,布局指南的宽度等于超视图宽度的20%。

在iOS 9之前,您可以使用隐藏的虚拟视图而不是布局指南。