UIView.isHidden не работает при изменении ориентации с помощью viewWillTransition
Я пытаюсь изменить ориентацию всего одним видом, остальные привязаны к портрету. Я установил метод в моем AppDelegate, как показано ниже
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if globalVariables.gIsDosageView == "Y" {
if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight {
return UIInterfaceOrientationMask.all;
} else {
return UIInterfaceOrientationMask.portrait;
}
} else {
return UIInterfaceOrientationMask.portrait;
}
}
Глобальная переменная gIsDosageView устанавливается в "Y", когда выбрано представление "Дозировка". Я создал два отдельных вида: PortraitView (375x812) и LandscapeView (812x375). Я использовал метод viewWillTransition, чтобы поймать каждое изменение в ориентации, как показано ниже
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
if size.width < 400 {
self.userImg.isHidden = false
self.deviceImg.isHidden = false
self.portraitView.isHidden = false
self.landscapeView.isHidden = true
}
else {
self.userImg.isHidden = true
self.deviceImg.isHidden = true
self.portraitView.isHidden = true
self.landscapeView.isHidden = false
}
}
Когда я перехожу с основного экрана на Дозировку, он отображает правильный экран и без проблем переключается между обоими видами ориентации. Однако, если я перейду на другой экран и вернусь к экрану "Дозировка", он покажет только экран, который был впервые загружен на обоих экранах ориентации. Я прошел через код, и он скрывает правильные экраны, но это не отражается в конечном виде. Если я сначала выберу экран в портретной ориентации, он будет успешно переключаться между книжной и альбомной ориентацией, но если я перейду к следующему экрану и вернусь в режим дозирования, он будет отображать только портретный экран независимо от ориентации и будет игнорировать код в viewWillTransition(),
Почему это и что я пропустил?
1 ответ
viewWillTransition
вызывается только при повороте устройства. Когда вы переключаетесь между открытыми видами без поворота, он не вызывается, поэтому не настраивает вид так, как вы хотите. Попробуйте поставить тест в viewWillAppear
вместо.