这段代码可以复制粘贴到一个新创建的项目中:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let label = createLabel()
let imageView = createImageView()
let stackView = UIStackView(arrangedSubviews: [imageView, label])
stackView.axis = .vertical
stackView.spacing = 5
view.addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { (_) in
imageView.isHidden = true
}
}
func createLabel() -> UILabel {
let label = UILabel(frame: .zero)
label.text = "Some Text"
label.setContentHuggingPriority(.required, for: .horizontal)
label.setContentHuggingPriority(.required, for: .vertical)
label.backgroundColor = .green
return label
}
func createImageView() -> UIImageView {
let imageView = UIImageView()
imageView.backgroundColor = .red
imageView.heightAnchor.constraint(equalToConstant: 200).isActive = true
imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor).isActive = true
return imageView
}
}
它是 UIStackView
中的一个 UILabel
和一个 UIImageView
。当我隐藏 UIImageView
时,我看到 UIStackView
正确地适应了 UILabel 的
高度。但是,UIStackView
不会自行适应 UILabel
的宽度。
我怎样才能让 UIStackView
调整自己的大小到它只有可见的 View /UILabel
?我为 UIImageView
的高度 anchor 常量设置了可变约束,并在隐藏 UIImageView
时将其关闭,但 UILabel
对某些人来说消失了奇怪的原因。
最佳答案
添加堆栈 View alignment
This property determines how the stack view lays out its arranged views perpendicularly to its axis. The default value is UIStackView.Alignment.fill.
stackView.alignment = .leading
Stackview 将自身调整为仅可见的 UILabel
关于swift - 在 stackview 中隐藏 View 仍然保持约束事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56206970/