Ios Xcode界面生成器:使视图的中心X等于其superview的三分之一

Ios Xcode界面生成器:使视图的中心X等于其superview的三分之一,ios,xcode,autolayout,storyboard,Ios,Xcode,Autolayout,Storyboard,我有两个视图,我想把它们放在水平方向上,使它们的间距相等 我想定义它们的中心X,这样它们就是superview宽度的三分之一和三分之二,但我没有发现允许这样做的约束设置 你能告诉我怎样才能做到这一点吗 可以使用具有以下设置的中心X约束: 对于第二个视图,乘数当然必须是2/3 结果: 仅从最后一个视图的子视图和Superview屏幕中选择“对齐中心X” 更改乘数: 第一个是2:3,第二个是4:3: 你说: 我有两个视图,我想把它们放在水平方向上,使它们的间距相等 我想定义它们的中心X,以便它们是

我有两个视图,我想把它们放在水平方向上,使它们的间距相等

我想定义它们的中心X,这样它们就是superview宽度的三分之一和三分之二,但我没有发现允许这样做的约束设置

你能告诉我怎样才能做到这一点吗

可以使用具有以下设置的中心X约束:

对于第二个视图,乘数当然必须是2/3

结果:

仅从最后一个视图的子视图和Superview屏幕中选择“对齐中心X”

更改乘数: 第一个是2:3,第二个是4:3:

你说:

我有两个视图,我想把它们放在水平方向上,使它们的间距相等

我想定义它们的中心X,以便它们是superview宽度的三分之一和三分之二,但我没有发现允许您这样做的约束设置

值得注意的是,等距的,中心x⅓ 和⅔ superview的所有组件实际上并不相同。考虑一下⅓ 和⅔ 场景:想象一个300像素宽的superview,它将⅓ 和⅔ 分别为100分和200分。如果然后添加两个50像素宽的子视图,则左右边距各为75像素,但中心边距为50像素。如果子视图较宽,则情况会变得更糟,例如,如果子视图的宽度为100像素,则左右各有50个像素的边距,但中间绝对没有空间

如果确实希望子视图之间的水平空间与子视图及其superview边缘之间的空间相等,则可以使用布局参考线(如果以编程方式执行)

因此,假设您已经创建了两个子视图,并考虑了它们的大小和垂直约束,则可以执行以下操作:

// 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中执行此操作,则不能创建这些类型的布局参考线,但可以添加三个不可见的间隔视图,即alpha为0的简单UIView对象,这些对象具有保持各自宽度相等的约束。然后将这五个视图粘贴到堆栈视图中的两个子视图加上三个间隔视图上,或者,如果您是受虐狂,请绕过堆栈视图,自己在这五个子视图之间添加六个前导/尾随约束,从而在这三个不可见的间隔视图之间实现两个等距子视图的理想效果

这就是使三个间隔视图可见的样子,这样您就可以看到发生了什么:

当您将这三个间隔视图的alpha设置为0以使其不可见时,净效果如下:


我一定很喜欢那张素描:D