我试图只用一个视图来改变方向,其余的都固定在Portrait上。我在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
}
}
当我从主屏幕转到Dosage时,它会显示正确的屏幕,并且会在两个方向视图之间切换而不会出现问题。但是,如果我转到另一个屏幕并返回到Dosage屏幕,它只显示在两个方向屏幕中首次加载的屏幕。我已经逐步完成了代码并隐藏了正确的屏幕,但这并未反映在生成的视图中。如果我首先以纵向选择屏幕,它将在纵向和横向之间成功切换,但是如果我转到下一个屏幕并返回到Dosage,它将只显示纵向屏幕而不管方向如何并且似乎忽略viewWillTransition()中的代码
为什么会这样,我错过了什么?
答案 0 :(得分:0)
viewWillTransition
仅在设备旋转时调用。当您在不旋转的情况下在打开的视图之间切换时,它将不会被调用,因此不会将视图设置为您想要的方式。请尝试将测试放入viewWillAppear
。