我有两个视图控制器;一个用于风景,另一个用于肖像。 如何在设备旋转时以编程方式切换这些,就像本机iPhone计算器一样。
此外,纵向和横向视图控制器在xcode和swift中彼此不同。
任何帮助都将不胜感激。
答案 0 :(得分:1)
处理此类事物的现代方法是让一个控制器适应不同的尺寸,不仅可以处理各种可能的屏幕尺寸,还可以处理iPad的Slide Over和Split View多任务处理。您应该对UI进行重大更改,例如计算器示例是按大小类区分,在此处说明:
Interface Builder中的故事板默认使用大小类。大小类是分配给用户界面元素的特征,如场景或视图。它们粗略地指示了元素的大小。 Interface Builder允许您根据当前大小类自定义许多布局功能。然后,布局会随着大小类的变化自动调整。具体来说,您可以基于每个大小的类设置以下功能:
- 安装或卸载视图或控件。
- 安装或卸载约束。
- 设置选择属性的值(例如,字体和布局边距设置)。
当系统加载场景时,它会实例化所有视图,控件和约束,并将这些项目分配给视图控制器中的相应插座(如果有)。无论场景的当前大小等级如何,您都可以通过其出口访问这些项目。但是,只有在为当前大小类安装这些项目时,系统才会将这些项目添加到视图层次结构中。
当视图的大小类发生更改时(例如,当您在全屏和拆分视图之间旋转iPhone或切换iPad应用程序时),系统会自动向视图层次结构添加项目或从视图层次结构中删除它们。系统还会动画对视图布局的任何更改。
可以在raywenderlich.com找到优秀的教程:
答案 1 :(得分:1)
有时需要显示另一个控制器。 注意:.compact trait是所有iPhone的景观。 我是这样做的:
lazy var switchViewController: UIViewController? = {
let vc = self.storyboard?.instantiateViewController(withIdentifier: "SwitchViewController")
vc?.modalTransitionStyle = .crossDissolve
return vc
}()
override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animate(alongsideTransition: { (_) in
let orientation = newCollection.verticalSizeClass
switch orientation {
case .compact:
self.present(self.switchViewController!, animated: true, completion: .none)
default:
self.switchViewController!.dismiss(animated: true, completion: .none)
}
}, completion: .none)
super.willTransition(to: newCollection, with: coordinator)
}
答案 2 :(得分:0)
您不需要为这些使用不同的UIViewControllers。您只需要覆盖UIViewController的一些方法,以便在更改设备方向时修改UI。
您可以关注以下链接:
tutorial 1
tutorial 2