以编程方式向UIStackView添加视图

4

我正在尝试向UIStackLabel添加两个动态的UILabels。目标是将这两个标签水平居中于视图中间。

这两个UILabels分别是:

var nameLabel: UILabel!
var ageLabel: UILabel!

UIStackView 是什么?

var stackedInfoView: UIStackView!

我尝试遵循这个答案中提供的指南,配置我的视图如下:

nameLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 120.0, height: 24.0))
ageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 80.0, height: 24.0))
nameLabel.text = "Harry Potter"
ageLabel.text = "100"


stackedInfoView = UIStackView(arrangedSubviews: [nameLabel, ageLabel])
stackedInfoView.axis = .horizontal
stackedInfoView.distribution = .equalSpacing
stackedInfoView.alignment = .center
stackedInfoView.spacing = 30.0
stackedInfoView.centerXAnchor.constraint(equalTo: self.extendedNavView.centerXAnchor).isActive = true
stackedInfoView.centerYAnchor.constraint(equalTo: self.extendedNavView.centerYAnchor).isActive = true

self.extendedNavView.addSubview(stackedInfoView) //extendedNavView is configured inside Storyboard

我的问题是,stackedInfoView没有显示出来。此外,当我打印它的frame时,我得到的是{{0, 0}, {0, 0}}。我还收到了一堆关于无法同时满足约束条件的错误信息。
在制作我的UIStackView方面,我做错了什么?非常感谢您的任何指导。
1个回答

10

两个问题,

stackedInfoView.centerXAnchor.constraint(equalTo:self.extendedNavView.centerXAnchor).isActive = true
stackedInfoView.centerYAnchor.constraint(equalTo:self.extendedNavView.centerYAnchor).isActive = true

应该放在self.extendedNavView.addSubview(stackedInfoView)之后。因为在配置约束之前,堆栈视图必须在视图层次结构中。

第二步,添加stackedInfoView.translatesAutoresizingMaskIntoConstraints = false将告诉UIKit您想要使用自动布局设置堆栈视图的位置。

如果storyboard中的extendedNavView没有布局问题,则以下代码应该可以正常工作:

override func viewDidLoad() {
    super.viewDidLoad()

    var nameLabel: UILabel!
    var ageLabel: UILabel!

    var stackedInfoView: UIStackView!

    nameLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 120.0, height: 24.0))
    ageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 80.0, height: 24.0))
    nameLabel.text = "Harry Potter"
    ageLabel.text = "100"

    stackedInfoView = UIStackView(arrangedSubviews: [nameLabel, ageLabel])
    stackedInfoView.axis = .horizontal
    stackedInfoView.distribution = .equalSpacing
    stackedInfoView.alignment = .center
    stackedInfoView.spacing = 30.0

    stackedInfoView.translatesAutoresizingMaskIntoConstraints = false

    self.extendedNavView.addSubview(stackedInfoView) //extendedNavView is configured inside Storyboard

    stackedInfoView.centerXAnchor.constraint(equalTo: self.extendedNavView.centerXAnchor).isActive = true
    stackedInfoView.centerYAnchor.constraint(equalTo: self.extendedNavView.centerYAnchor).isActive = true

}

1
谢谢!这很有帮助。 - daspianist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接