Я пытаюсь использовать автоматический макет программно, чтобы мой пользовательский вид адаптировал свой размер при изменении границ. Чего я пытаюсь добиться:
1) сделать вид на экране максимально большим, но сохранить соотношение сторон между его высотой и размером 8/5
2) никогда не выходить за пределы безопасной зоны
3) всегда оставайтесь посередине
Когда я использую этот набор ограничений в раскадровке, все работает отлично, но когда я делаю то же самое в коде, xcode нарушает мое ограничение по высоте (которое я использую для соотношения сторон для представления). Я играл с приоритетами, но безуспешно. Что я делаю не так? Вот мой код и скриншот моих ограничений раскадровки:
скриншот ограничений раскадровки
private func setupLayout () {
playingCardView.translatesAutoresizingMaskIntoConstraints = false
//makes the maxim width possible
let playingCardViewWidthConstraint = playingCardView.widthAnchor.constraint(equalToConstant: 800)
playingCardViewWidthConstraint.priority = UILayoutPriority(rawValue: 250)
playingCardViewWidthConstraint.identifier = "width"
//for aspect ratio
let playingCardViewHeightConstraint = playingCardView.heightAnchor.constraint(equalTo: playingCardView.widthAnchor, multiplier: 8.0/5.0)
playingCardViewHeightConstraint.identifier = "height"
//make the view stay within bounds
//add some padding top
let playingCardTopConstraint = playingCardView.topAnchor.constraint(lessThanOrEqualTo: view.safeAreaLayoutGuide.topAnchor, constant: Constants.offsetFromTheEdge)
//add some padding bottom
let plaingCardViewBottomConstraint = playingCardView.bottomAnchor.constraint(lessThanOrEqualTo: view.safeAreaLayoutGuide.bottomAnchor, constant: Constants.offsetFromTheEdge)
//add some padding leading
let playingCardViewLeadingConstraint = playingCardView.leadingAnchor.constraint(lessThanOrEqualTo: view.layoutMarginsGuide.leadingAnchor, constant: Constants.offsetFromTheEdge)
////add some padding trailing
let playingCardViewTrailingConstraint = playingCardView.trailingAnchor.constraint(lessThanOrEqualTo: view.layoutMarginsGuide.trailingAnchor, constant: Constants.offsetFromTheEdge)
NSLayoutConstraint.activate([
playingCardViewWidthConstraint,
playingCardViewHeightConstraint,
playingCardView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
playingCardView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
playingCardTopConstraint,
playingCardViewBottomConstraint,
playingCardViewLeadingConstraint,
playingCardViewTrailingConstraint
])
}
}