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 вместо.

Другие вопросы по тегам