Этот код можно скопировать и вставить во вновь созданный проект:
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
}
}
Это UILabel
и UIImageView
внутри UIStackView
.Когда я скрываю UIImageView
, я вижу, что UIStackView
правильно адаптируется к высоте UILabel's
.Однако UIStackView
не адаптируется к ширине UILabel
.
Как я могу сделать так, чтобы UIStackView
изменил размеры, чтобы это были только видимые виды / UILabel
?Я установил ограничение на переменную для якорной константы высоты UIImageView
и отключил ее, когда скрывал UIImageView
, но затем UILabel
исчезает по какой-то странной причине.