addSubview和addArrangedSubview不显示内容

问题描述

我正在将UILabel添加UIView,然后将UIView添加UIStackView,但是UILabel没有显示

override func viewDidLoad() {
    super.viewDidLoad()
    
    configureStackView()
    
    label.text = "test"
    containerView.addSubview(label)
    stackView.addArrangedSubview(containerView)
    view.addSubview(stackView)
    
    setStackViewConstraints()
}

func configureStackView() {
    stackView.axis = .vertical
    stackView.distribution = .fill
    stackView.alignment = .fill
    stackView.spacing = 5
}

func setStackViewConstraints() {
     stackView.translatesAutoresizingMaskIntoConstraints = false
     stackView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
     stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
     stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
     stackView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
     stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
 }

我尝试为视图设置某种尺寸,但是不起作用:

containerView = UIView(frame: CGRect(x: 0,y: 0,width: 200,height: 200))

或为containerViewwidthAnchorleadingAnchor标签设置约束到trailingAnchor,但这都不起作用。

解决方法

UIView本身没有intrinsicContentSizeUIStackView用于确定放置在stackView中的视图的大小。为标签的四个边缘设置约束到容器的边缘

label.topAnchor.constraint(container.topAnchor,constant: myTopConstant).isActive = true
label.leading....
label.bottom....
label.trailing....

label.setContentHuggingPriority(to: .defaultLow,axis: .vertical)

(上面,如果您没有在stackView中放置其他视图,请放宽contentHuggingPriority;由于它的高度和distribution = .fill固定,因此您的stackView会尝试拉伸rangedViews以适应其高度。如果标签/容器是唯一的候选对象,则将在标签上使用.required contentHugging来打破约束

或为容器指定明确的高度(因为stackView的轴是垂直的)

containerView.heightAnchor.constraint(equalTo: ....).isActive = true

另外,在您的容器中设置

translatesAutoresizing... = false

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...