我为白色矩形设置右边距(视图) - 1.008
现在我想设置Top Margin - 1.1,但没有任何变化(与我为Multiplier设置的无关),white rect仍然位于黑色rect的顶部,没有任何余量:
P.S。我不想使用常量(我想设置百分比的边距取决于父视图,似乎乘数是为此而设计的)
更新(我想要的例子)
答案 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
,以便您可以看到我想要实现的目标):
在这种情况下,您需要设置以下约束。我将使用编程方式设置它们,但我相信您可以轻松阅读它们并将它们转换为故事板:
首先,将透明(在我的视图中为红色)虚拟视图约束到黑色视图的右上角 - 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