Autolayout中的相对中心
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Autolayout中的相对中心相关的知识,希望对你有一定的参考价值。
我正在使用Autolayout定位我的观点。在我的情况下,这是一个顶部的UILabel
和它下面的UIStackView
。 UIStackView
配置为.fill
,所有它的arrangedSubviews
都有正确的heightConstraint
。我想要做的是添加约束,以便UIStackView
垂直居中在myLabel.bottomAnchor
和mySuperview.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
的上方和下方添加了空的UIStackView
s,并将外部的s设置为Fit比例
另外...
qazxswpoi
以上是关于Autolayout中的相对中心的主要内容,如果未能解决你的问题,请参考以下文章
ios8 beta 4下无法识别AutoLayout容器相对位置
Storyboardxib中的UIScrollView使用autolayout,使其能够滚动