问题描述
我正在将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))
或为containerView
,widthAnchor
或leadingAnchor
的标签设置约束到trailingAnchor
,但这都不起作用。
解决方法
UIView本身没有intrinsicContentSize
,UIStackView
用于确定放置在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