【发布时间】:2020-02-24 19:15:59
【问题描述】:
我制作了一个带有两个标签的示例 ViewController 来突出我的问题。目标是将标签垂直分隔 10,然后使用大于或等于约束将它们垂直居中。我使用的是视觉格式,但是如果我设置了像view.topAnchor.constraint(greaterThan... 这样的约束,这应该适用。我也有两个限制来水平布局标签
我的视图控制器:
class myVC: UIViewController {
lazy var titleLabel: UILabel = {
let l = UILabel(frame: .zero)
l.translatesAutoresizingMaskIntoConstraints = false
l.text = "Hello World"
l.font = .systemFont(ofSize: 50)
l.textColor = .black
return l
}()
lazy var descLabel: UILabel = {
let l = UILabel(frame: .zero)
l.translatesAutoresizingMaskIntoConstraints = false
l.text = "description"
l.font = .systemFont(ofSize: 35)
l.textColor = .gray
return l
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .yellow
view.addSubview(titleLabel)
view.addSubview(descLabel)
titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
descLabel.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor).isActive = true
NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "V:|-(<=50)-[titleLabel]-(10)-[descLabel]-(<=50)-|", options: .init(), metrics: nil, views: ["titleLabel": titleLabel, "descLabel": descLabel]))
}
}
这导致。据我了解,这应该将视图分隔 10 pts,并将标签垂直居中,因为在 "V:|-(<=50)-[titleLabel]-(10)-[descLabel]-(<=50)-|" 格式中,我说标题标签的顶部和超级视图的顶部之间的距离至少应为 (greaterThanOrEqualTo) 50,并且描述标签底部和超级视图底部之间的距离至少应为 50。如果我想将两个标签垂直居中,我的顶部和底部约束应该是什么样的?
是的,我意识到我可以设置垂直和水平中心,但这是我为一个我无法使用它们的问题制作的示例。我需要能够以大于(或小于)或等于约束的方式使视图居中。
【问题讨论】:
-
仅使用两个标签将很难实现。不过,通过将它们嵌入
UIView(并将视图垂直居中)或使用UIStackView更容易做到这一点 -
在我的实际应用程序中,我有多个视图的垂直堆栈,它们之间的间距不一致,所以 stackView 并没有真正帮助我。
-
您可以在堆栈视图中嵌入堆栈视图。否则,将标签嵌入
UIView。但是...尝试使用 VFL(视觉格式语言)将元素居中是也有问题的。
标签: ios swift autolayout constraints visual-format-language