Ios 如何使用百分比设置约束?

Ios 如何使用百分比设置约束?,ios,autolayout,Ios,Autolayout,这只是一个非常直接的问题,但我们花了很多时间试图找到一个有效的解决方案,但失败了 在Xcode、故事板中,如何设置一个约束,使一个视图可以位于距superview顶部的总窗口高度的30%以内?对于所有支持的iOS设备,我们需要所有方向都是这样 请参阅随附的插图。在等高约束属性窗格中,您将乘数设置为“1:3”(即除法中的30%)更新 对不起,我误解了你的问题 您需要像这样添加代码中的约束(xConstraint完全是任意的,但您必须定义x、y位置、宽度和高度,以获得明确的布局): 这样,方程式将为

这只是一个非常直接的问题,但我们花了很多时间试图找到一个有效的解决方案,但失败了

在Xcode、故事板中,如何设置一个约束,使一个视图可以位于距superview顶部的总窗口高度的30%以内?对于所有支持的iOS设备,我们需要所有方向都是这样


请参阅随附的插图。

等高约束
属性窗格中,您将乘数设置为“1:3”(即除法中的30%)

更新 对不起,我误解了你的问题

您需要像这样添加代码中的约束(xConstraint完全是任意的,但您必须定义x、y位置、宽度和高度,以获得明确的布局):

这样,方程式将为:

imageView.top = 1 * view.top + (view.width / 3)
view.height = 0.3 * superView.height + 0
原始答案 自动布局对约束使用以下等式:

aView.property = Multiplier * bView.property + Constant
基于此,您可以简单地添加等宽/等高约束,然后添加乘数:

所以方程是:

imageView.top = 1 * view.top + (view.width / 3)
view.height = 0.3 * superView.height + 0

你应该计算一下

1。计算从顶部到中心图像视图的百分比

2.将垂直中心设置为ImageView

3.在垂直中心约束中配置乘数,并从1设置乘数

例如:乘数0.5将是从顶部到中心ImageView的25%。所以你的乘数是~0.6

顺便说一下,还有另一种方法:

1.创建从顶部到图像视图的透明视图

2.将高度设置为与子视图相等

3。将此高度约束的乘数设置为0.3


4.将imageView到该透明视图的底部空间设置为零

我将在下面演示-您只需更改倍增的值


为了避免每次在
layoutsubview
之后都必须重新计算常量,请使用
UILayoutGuide

创建等于视图高度30%的布局参考线,然后使用该布局参考线对齐子视图的顶部。无需手动布局计算

// Create a layout guide aligned with the top edge of the parent, with a height equal to 30% of the parent
let verticalGuide = UILayoutGuide()
parent.addLayoutGuide(verticalGuide)
verticalGuide.topAnchor.constraint(equalTo: parent.topAnchor).isActive = true
verticalGuide.heightAnchor.constraint(equalTo: parent.heightAnchor, multiplier: 0.3).isActive = true

// Align the top of the child to the bottom of the guide
child.topAnchor.constraint(equalTo: verticalGuide.bottomAnchor).isActive = true


ui布局指南
可以像任何视图一样使用约束进行布局,但不会出现在视图层次结构中。

它不应该是
视图。顶部
而不是
视图。高度
?您不能在IB中编写这种约束(关联两个不同的属性),您必须在代码中编写它们。谢谢!!这看起来是可行的,但是,这是我的错,我应该说最好不用编码就可以完成…你看,我们有一个普遍的规则,一个愚蠢的规则,所有与UI相关的东西都应该在故事板中,除非它是100%必要的。所以我想要的是一个解决方案,也许通过添加一些嵌套的UIView?我的意思是我可以在HTML中使用CSS,为什么我们不能在故事板中使用呢?我真的认为我们可以…嗯,在这种情况下,只需添加一个固定在顶部布局指南上的
UIView
,高度为superview高度的1/3(就像我最初解释的那样),并添加一个不可见的背景色。并在其下方添加图像视图,距离为0。我知道这只是一个解决方法,但我认为如果没有一些代码(正如@Cyrille指出的),约束本身是不可能的。我现在知道了。看来你是对的。我要结束这篇文章,给你学分。仍然认为这很普遍,也许苹果会在未来的xcode版本中加入这一点。谢谢大家!!不是视图的高度应该是其父视图高度的1/3,而是视图的顶部边距应该是其父视图高度的1/3。在IB中是不可撤销的。我读得太快了。事实上,在构建适应性更强的接口时,我们很快就达到了IB的极限。这就是为什么我更喜欢在代码中定义我的接口。等高约束对我来说是禁用的,我缺少任何东西吗?很好的回答只是要详细说明一下:每个约束都是一个线性函数,形式为“pos=乘数*第二项+常量”,因此如果您需要从父视图左侧查看40%,请选择尾部作为“第二项”,将常量设置为0,将乘数设置为0.4。这将给出“pos=0.4*尾随+0”,即尾随距离(宽度)的40%。做类似的垂直定位。。。