如果您想要自定义行为,那么基于自动旋转的新尺寸类会很痛苦。这是我的要求和流程:
- View Controller 1(VC1) 以模态方式呈现 View Controller 2 (VC2)
VC1 仅支持横向、纵向或两者,具体取决于用户设置(通过 实现
supportedInterfaceOrientations
)。对于这个例子,我们假设它被锁定为横向,VC 2 支持横向和纵向
statusBarOrientation
我使用 Size 类,并在 View Controller 1中检查viewWillTransition
(调整大小...)以配置界面元素定位和其他自定义项。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
let orientation = UIApplication.shared.statusBarOrientation
NSLog("View will transition to \(size), \(orientation.rawValue)")
super.viewWillTransition(to: size, with: coordinator)
coordinator.animate(alongsideTransition: { [unowned self] (_) in
....
}
}
这有效,除非出现 VC 2 并旋转设备。当 VC 2 被解雇时,VC 1 全部搞砸了。可以肯定的是,我想在 View Controller 1 出现时刷新它的布局。我怎么做?我尝试了 UIViewController.attemptRotationToDeviceOrientation() 但它不会强制再次调用自动旋转方法。
编辑:可以看出,在 VC1 中,我检查 statusBarOrientation 以确定界面方向。这带来了一个问题,因为当 VC2 旋转到纵向模式时,statusBarOrientation 会更改为纵向。在我强制布局为纵向模式的同时,在 VC1 上调用 viewWillTransition to size。