上边距(自动布局)

时间:2018-03-01 07:55:01

标签: ios autolayout

我为白色矩形设置右边距(视图) - 1.008

enter image description here

现在我想设置Top Margin - 1.1,但没有任何变化(与我为Multiplier设置的无关),white rect仍然位于黑色rect的顶部,没有任何余量:

enter image description here

P.S。我不想使用常量(我想设置百分比的边距取决于父视图,似乎乘数是为此而设计的)

更新(我想要的例子)

enter image description here

1 个答案:

答案 0 :(得分:1)

这里的Autolayout按预期工作。你的问题是一个简单的数学问题。你的superview top位于0,对于你的约束,这是有效的(阅读更多关于约束解剖here):

yourView.top = multiplier * superView.top + constant

填写值后:

yourView.top = 0 * 1.1 + 0

这很简单:

yourView.top = 0

在你的问题中,正确的间距是有效的,因为superView.right肯定大于0(从我在图片上看到的,它正在接近UIScreen.main.bounds.width)。

<强>更新

要获得您想要的内容,我通常建议您使用UILayoutGuide,但由于您使用的是故事板(不受支持),您必须添加虚拟透明UIView

获得您想要的内容的布局需要看起来像这样(我使用.red颜色代替.clear,以便您可以看到我想要实现的目标):

enter image description here

在这种情况下,您需要设置以下约束。我将使用编程方式设置它们,但我相信您可以轻松阅读它们并将它们转换为故事板:

首先,将透明(在我的视图中为红色)虚拟视图约束到黑色视图的右上角 - blackView):

// by default constant = 0, multiplier = 1
dummyView.topAnchor.constraint(equalTo: blackView.topAnchor).isActive = true
// right or trailing, it's up to you
dummyView.rightAnchor.constraint(equalTo: blackView.rightAnchor).isActive = true

然后将dummyView约束为一个完美的正方形(宽度等于高度):

// by default constant = 0, multiplier = 1
dummyView.widthAnchor.constraint(equalTo: dummyView.heightAnchor).isActive = true

保持whiteView的右侧约束,并使用它来确定dummyView的大小:

dummyView.leftAnchor.constraint(equalTo: whiteView.leftAnchor).isActive = true

在此之后,dummyView的大小将为offset x offset,因为其左侧约束为whiteView.right,右侧约为blackView.right

所以现在你完成了最后一个约束,它将从顶部正确定位whiteView

whiteView.topAnchor.constraint(equalTo: dummyView.bottomAnchor).isActive = true