UIView.isHidden 使用 viewWillTransition 更改方向时不起作用

UIView.isHidden not working when changing orientation using 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;
    }
}

当 select 编辑剂量视图时,全局变量 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
    }
}

当我从主屏幕转到 Dosage 时,它​​会显示正确的屏幕,并且会在两个方向视图之间切换而不会出现问题。但是,如果我转到另一个屏幕并返回剂量屏幕,它只会显示在两个方向屏幕中首次加载的屏幕。我已经逐步完成代码,它隐藏了正确的屏幕,但这并没有反映在结果视图中。如果我先 select 纵向屏幕,它会在纵向和横向之间成功切换,但如果我转到下一个屏幕并 return 剂量,它只会显示纵向屏幕,而不管方向如何并出现忽略 viewWillTransition() 中的代码。

为什么会这样,我错过了什么?

viewWillTransition 仅在设备旋转时调用。当您在不旋转的情况下在打开的视图之间切换时,它不会被调用,因此不会按照您的需要设置视图。尝试将测试放在 viewWillAppear 中。