Вы не можете справиться с этой ситуацией только в конструкторе интерфейсов. Я рекомендую вам использовать UIStackView
и менять его ось при изменении ориентации в коде.
Может быть, вы также хотите установить и активировать / деактивировать некоторые ограничения ширины и высоты для вашего красного вида, чтобы сохранить его правильный размер в зависимости от текущей ориентации.
Решение может выглядеть так:
@IBOutlet weak var outerStackView: UIStackView!
@IBOutlet weak var redViewWidthConstraint: NSLayoutConstraint!
@IBOutlet weak var redViewHeightConstraint: NSLayoutConstraint!
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
let willTransitionToLandscape = (size.width > size.height)
if willTransitionToLandscape {
redViewHeightConstraint.isActive = false
redViewWidthConstraint.isActive = true
} else {
redViewWidthConstraint.isActive = false
redViewHeightConstraint.isActive = true
}
coordinator.animate(alongsideTransition: { _ in
self.outerStackView.axis = willTransitionToLandscape ? .horizontal : .vertical
self.view.layoutIfNeeded()
})
}