Autolayout中的相对中心

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Autolayout中的相对中心相关的知识,希望对你有一定的参考价值。

我正在使用Autolayout定位我的观点。在我的情况下,这是一个顶部的UILabel和它下面的UIStackViewUIStackView配置为.fill,所有它的arrangedSubviews都有正确的heightConstraint。我想要做的是添加约束,以便UIStackView垂直居中在myLabel.bottomAnchormySuperview.bottomAnchor之间的空间。

到目前为止我尝试的是:

  • UIStackView添加顶部和底部约束: _stackView.topAnchor.constraint(greaterThanOrEqualTo: _myLabel.bottomAnchor) _stackView.bottomAnchor.constraint(greaterThanOrEqualTo: _mySuperview.bottomAnchor)

现在这是因为它只是将正确大小的UIStackView放在_mySuperview的底部。

但我想要的是它在中心。我看到有一个名为anchorWithOffset(to:)的方法听起来就像我需要的但是找不到正确的方法来使用它。

所以我的问题是,如何将UIView置于两个给定的NSLayoutAnchors之间?

编辑:我知道我可以添加一个UIView,这是我的两个其他视图之间的约束,并在那里居中我的UIStackView。然而,我正在寻找一个更纯粹的解决方案。

答案

下一个代码可以解决问题:

let dimensionBefore = _myLabel.bottomAnchor.anchorWithOffset(to: _stackView.centerYAnchor)
let dimensionAfter = _stackView.centerYAnchor.anchorWithOffset(to: _mySuperview.bottomAnchor)
dimensionBefore.constraint(equalTo: dimensionAfter, multiplier: 1).isActive = true

但这仅适用于ios 10

另一答案

看起来你想在代码中而不是在storyboard / xib中实现这一点,但这些通常对于测试自动布局的想法非常有用 - 一旦你在故事板中使用它就会清楚你需要什么代码写做同样的事。

您可以通过使用额外的垂直UIStackView来包装您想要的UIStackView来实现这一目标。

在下面的例子中,我在内部UIView的上方和下方添加了空的UIStackViews,并将外部的enter image description heres设置为Fit比例

enter image description here

另外...

qazxswpoi

以上是关于Autolayout中的相对中心的主要内容,如果未能解决你的问题,请参考以下文章

ios8 beta 4下无法识别AutoLayout容器相对位置

代码适配(Autolayout)

如何在android中的地图片段内中心线性布局?

Storyboardxib中的UIScrollView使用autolayout,使其能够滚动

使 UILabel 以不断变化的内容和 AutoLayout 为中心

Autolayout其他用法