Ограничение высоты StackView продолжает изменять содержащиеся в нем представления - PullRequest
0 голосов
/ 09 июня 2019

У меня есть вид в стеке, который содержит две метки (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 пикселей сверху, обратите внимание, что одна метка внутри стека почему-то растягивается, и я не хочу, чтобы

Моя цель - чтобы кнопки были размером с первое изображение, но былипривязанный к верхней части вида, как на втором рисунке.

...