Xcode界面生成器:制作一个视图的中心X等于它的超级视图的三分之一

问题描述:

我有两个视图,我想以一种方式将它们水平放置。Xcode界面生成器:制作一个视图的中心X等于它的超级视图的三分之一

我想定义thier Center X,使他们的第三和上海华宽度的三分之二,但我没有发现任何的限制设置,允许你这样做。

你能告诉我这是怎么实现的吗?

enter image description here

+1

总得爱草图:d – LinusGeffarth

您可以使用Center X约束以下设置:

Center X

对于第二视图Multiplier必须是当然的2/3

结果: Result

选择居中对齐X从子视图和上海华(只有最后一个的屏幕) enter image description here

更改乘数: 2:3的第一个,并且4:3的第二个:

enter image description here

你说:

我有一个两个视图我想以一种方式放置它们的方式是水平等分。

我想定义他们的中心X,以便它们是超视图宽度的三分之二和三分之二,但是我没有发现允许你这样做的约束设置。

值得注意的是,“等间隔”和“中心x是超视图的⅓和are”实际上并不是同一个东西。考虑“⅓和⅔”情景:假设一个300像素宽的超视图,它将分别将⅓和⅔点分别设置为100和200。如果您添加两个宽度为50像素的子视图,则左右边距均为75像素,但中间边距为50像素。如果子视图更宽,则情况会变得更糟(例如,如果子视图宽度为100像素,则左右边距将为50像素,但两者之间绝对没有空间)。

如果您确实希望它们均匀分布(子视图之间的水平空间与子视图和其超级视图边缘之间的空间相同),则可以使用布局指南(如果以编程方式执行)。

因此,假设你已经创建了两个子视图,并已采取了规模和垂直约束的照顾,你可以再做:

// create three layout guides 

let layoutGuides = (0 ..< 3).map { _ in UILayoutGuide() } 

// add them to your view 

layoutGuides.forEach { view.addLayoutGuide($0) } 

// create dictionary for VFL 

let views = ["layoutGuide0": layoutGuides[0], "layoutGuide1": layoutGuides[1], "layoutGuide2": layoutGuides[2], "subview0": subviews[0], "subview1": subviews[1]] 

// define horizontal constraints where three layout guides are the same width 

let vfl = "H:|[layoutGuide0][subview0][layoutGuide1(==layoutGuide0)][subview1][layoutGuide2(==layoutGuide0)]|" 

let constraints = NSLayoutConstraint.constraints(withVisualFormat: vfl, metrics: nil, views: views) 
NSLayoutConstraint.activate(constraints) 

如果你想做到这一点在IB,你不能创建这些类型的布局指南,但是可以添加三个不可见的“间隔”视图(即简单的UIView alpha为0的对象),并使约束条件保持各自的宽度彼此相等。然后在堆栈视图中粘贴这五个视图(两个子视图加上三个间隔视图)(或者,如果你是一个受虐狂,绕过堆栈视图并自己在这五个子视图之间添加六个前导/尾随约束),并且达到所需两个均匀间隔的子视图的效果(在这三个不可见的“间隔”视图之间)。

所以,这是什么样子(做了三个“隔离”视图中显示,所以你可以看到这是怎么回事):

enter image description here

净效应,当你给这三个间隔意见的0(以使它们不可见)的alpha如下:

enter image description here