自动排版中的相对中心

时间:2018-09-02 11:53:32

标签: ios swift autolayout

我正在使用“自动布局”来放置视图。 在我的情况下,顶部是UILabel,下面是UIStackViewUIStackView已配置为.fill,所有arrangedSubviews都具有正确的heightConstraint。 我想做的是添加约束,使UIStackViewmyLabel.bottomAnchormySuperview.bottomAnchor之间的空间中垂直居中。

到目前为止,我尝试过的是:

  • UIStackView添加上下约束:
    • _stackView.topAnchor.constraint(greaterThanOrEqualTo: _myLabel.bottomAnchor)
    • _stackView.bottomAnchor.constraint(greaterThanOrEqualTo: _mySuperview.bottomAnchor)

现在,通过将尺寸正确的UIStackView放在_mySuperview的底部,可以正常工作。

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

所以我的问题是,如何在两个给定的UIView之间使NSLayoutAnchors居中?

编辑:我知道我可以在其他两个视图之间添加一个约束UIView并将UIStackView居中的事实。但是,我正在寻找更纯净的解决方案。

2 个答案:

答案 0 :(得分:3)

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

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开始有效

答案 1 :(得分:1)

您似乎想在代码中而不是在Storyboard / xib中实现这一点,但是这些通常对于测试自动布局的想法非常有用-一旦在Storyboard中使用了它,就可以清楚地知道什么代码您需要写才能做同样的事情。

您可以通过使用其他垂直UIStackView包装所需的UIStackView来实现此目的。

在下面的示例中,我在内部UIView的上方和下方添加了空UIStackView,然后将外部import { Injectable } from '@angular/core'; import { Http } from '@angular/http'; import { Observable } from 'rxjs'; @Injectable() export class MoviesService { constructor(private http: Http) { } getMovies() : Observable<any> { let url = API_URL; return this.http.get(url); } } 设置为按比例拟合

enter image description here

或者……

enter image description here