我正在使用“自动布局”来放置视图。
在我的情况下,顶部是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
居中的事实。但是,我正在寻找更纯净的解决方案。
答案 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);
}
}
设置为按比例拟合
或者……