применялись бы свои констрейнты.
Во viewDidLoad вызываю createConstraints()
, а во viewWillLayoutSubviews вызываю changeConstraints()
func changeConstraints() {
if UIDevice.current.orientation.isPortrait {
NSLayoutConstraint.deactivate(landscapeConstraints)
NSLayoutConstraint.activate(portraitConstraints)
} else {
NSLayoutConstraint.deactivate(portraitConstraints)
NSLayoutConstraint.activate(landscapeConstraints)}
}
но, именно при ПЕРВОМ запуске на симуляторе, вижу, что к портретной применились альбомные. Перевернув несколько раз в портретной потом становятся нужные констрейнты.
1. почему не срабатывают при первом запуске портретные для портретной ориентации?
2. как сделать, чтобы сработали? Спасибо
Не стоит завязываться на isPortrait а лучше Size Classes как уже писали выше. Смотреть можно в метод // UITraitEnvironment var traitCollection: UITraitCollection { get } func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) В нем проверять verticalSizeClass и применять уже =) ПОчитать про это можно подробнее в книге Modern Auto Layout там хорошо описано
func changeConstraints(){ if UITraitCollection.current.verticalSizeClass == .regular { NSLayoutConstraint.deactivate(landscapeConstraints) NSLayoutConstraint.activate(portraitConstraints) } else { NSLayoutConstraint.deactivate(portraitConstraints) NSLayoutConstraint.activate(landscapeConstraints) } } вызываю во viewWillLayoutSubviews - не помого (что-то криво сделал?)
Обсуждают сегодня