0

如果您想要自定义行为,那么基于自动旋转的新尺寸类会很痛苦。这是我的要求和流程:

  • 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。

4

0 回答 0