带有Size类的UIViewController选择性自动旋转

时间:2018-11-18 19:09:47

标签: ios swift uikit size-classes uitraitcollection

如果要自定义行为,则基于新的大小类的Autorotation会很麻烦。这是我的要求和流程:

  • View Controller 1(VC1)以模态显示View Controller 2(VC2)
  • VC1仅根据用户设置(通过supportedInterfaceOrientations实现)支持横向,纵向或纵向和纵向。在此示例中,我们假设其被锁定为横向,

  • VC 2同时支持横向和纵向

我使用Size类,并且在View Controller 1中,我检查statusBarOrientation中的viewWillTransition(以size ...为单位)以配置界面元素的位置和其他自定义。

   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大小。

0 个答案:

没有答案