У меня есть вид в стеке, который содержит две метки (nameLabel и nicknameLabel).Я хочу, чтобы высота двух меток оставалась постоянной, как на первом изображении, но я также хочу, чтобы вид стека располагался в 30 пикселях от вершины его родительского вида (masterView).Однако, когда я установил ограничение topAnchor для представления стека, он изменяет высоту кнопок, когда они должны оставаться постоянными, как на первом рисунке.Может кто-нибудь объяснить, почему это так и как я могу решить эту проблему?
Вот мой код с просмотром стека:
class MasterDetailController: UIViewController {
let masterView: UIView = {
var view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
view.backgroundColor = UIColor.purple
return view
}()
var labelStackView = UIStackView()
var nameLabel = UILabel()
var nicknameLabel = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(masterView)
masterView.addSubview(labelStackView)
labelStackView.translatesAutoresizingMaskIntoConstraints = false
labelStackView.axis = .vertical
labelStackView.distribution = .fill
labelStackView.alignment = .center
labelStackView.spacing = 20
labelStackView.topAnchor.constraint(equalTo: masterView.topAnchor, constant: 30).isActive = true
labelStackView.heightAnchor.constraint(equalToConstant: 130).isActive = true
labelStackView.centerXAnchor.constraint(equalTo: masterView.centerXAnchor).isActive = true
labelStackView.centerYAnchor.constraint(equalTo: masterView.centerYAnchor).isActive = true
masterView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
masterView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
masterView.center = view.center
labelStackView.addArrangedSubview(nameLabel)
labelStackView.addArrangedSubview(nicknameLabel)
setupLayout()
}
func setupLayout() {
nameLabel.translatesAutoresizingMaskIntoConstraints = false
nicknameLabel.translatesAutoresizingMaskIntoConstraints = false
nameLabel.widthAnchor.constraint(equalTo: masterView.widthAnchor, multiplier: 0.75).isActive = true
nameLabel.heightAnchor.constraint(equalToConstant: 80).isActive = true
nameLabel.centerXAnchor.constraint(equalTo: masterView.centerXAnchor).isActive = true
nameLabel.backgroundColor = UIColor.orange
nameLabel.textAlignment = .center
nameLabel.font = UIFont(name: "AvenirNext-Regular", size: 30)
nicknameLabel.widthAnchor.constraint(equalTo: nameLabel.widthAnchor, multiplier: 0.7).isActive = true
nicknameLabel.heightAnchor.constraint(equalToConstant: 60).isActive = true
nicknameLabel.font = UIFont(name: "AvenirNext-Regular", size: 15)
nicknameLabel.textAlignment = .center
nicknameLabel.backgroundColor = UIColor.cyan
}
}
Здесь метки внутри просмотра стека верны, нопредставление стека расположено в центре представления, когда я хочу, чтобы оно находилось в 30 пикселях от верхней части представления
Вот изображение (текущее отображение) представления стека, когда япоместите его topAnchor 30 пикселей сверху, обратите внимание, что одна метка внутри стека почему-то растягивается, и я не хочу, чтобы
Моя цель - чтобы кнопки были размером с первое изображение, но былипривязанный к верхней части вида, как на втором рисунке.