我在视图中放置子视图时遇到的问题是距离后缘的百分比距离。它在常规的从左到右的语言(例如英语)中工作正常,但是当我将其本地化为从右到左的语言(例如阿拉伯语或希伯来语)时,约束似乎为零并且直接与后缘对接(在这种情况下左侧)。我创建了一个最小的测试项目,并且能够重现那里的问题。
我的所有观点都是在xib文件中设置的,而不是在storyboard中。
我用xib创建了一个ViewController。然后我放入一个固定大小的50x50子视图,从顶部放置一个固定的100,然后将80%的后边缘放到superview的尾随,如下面的屏幕截图所示:
为了好好衡量,为了确保它能够翻转视图,我添加了一个完全独立于其他子视图的标签。当我用英语运行时,一切看起来都很棒:
但是,在将设备的语言更改为阿拉伯语时,标签会正确反映,但它似乎忘记了尾随约束的百分比,只看到常量为0,这会导致子视图直接放在观点的一面。
有没有人知道我需要如何修改约束,以便设备记住RTL语言中后端的基于百分比的约束?
答案 0 :(得分:1)
如果您要定位iOS 9或更高版本,则可以使用布局指南(UILayoutGuide
)来设置间距。基本上,让您的视图的后缘邻接布局指南的前缘,布局指南的后缘邻接超视图的后缘,以及布局指南的宽度相当于superview宽度的20%。
在iOS 9之前,您可以使用隐藏的虚拟视图而不是布局指南。
答案 1 :(得分:0)
发现问题 - 事实证明问题是当autolayout约束翻转方向时,坐标系不。这意味着标准LTR约束将后沿放置在右边缘坐标值的80%(等于视图的宽度)。但是,当翻转RTL语言的视图约束时,它现在是左边缘坐标值的80%,现在为0。
不幸的是,似乎没有一个简单的解决方案。我尝试将视图放在相对于视图中心的百分比处。同样,它在LTR中工作正常,但是当切换到RTL时,它在视图的右侧保持完全相同的位置(因此它没有正确镜像)。 TBH,我不确定任何基于百分比的约束如何在LTR和RTL中都不起作用。
现在的解决方案是根据适当的范例在运行时设置约束。所以在LTR我把它设置在中心坐标的大约150%,但是如果它是RTL我大约50%。