0

我已经按照各种教程和下载的自定义的UINavigationController定制过渡动画实例多个版本:的UINavigationController定制转变,防止了在堆叠非可见视图控制器从旋转

什么我写什么,我已经下载都来自同一个问题的困扰。在呈现新的视图控制器之后,如果我旋转设备并且然后导航回去,没有的堆栈中先前的视图控制器已被旋转。这感觉就像通过使用自定义动画我已经从UINavigationControllers子控制器中删除了视图控制器,因此它不会发送它接收到的任何旋转消息。

有没有人遇到过这个?我和所有这些其他人做错了什么?或者这是用UINavigationControllers自定义转换动画的一个无意的结果?

我器件和模拟器测试,结果相同。

没有上述这让我想到,如果我的转变之一,是不是自定义会发生什么,所以我测试了一下和非定制动画化的转变没有这个问题,从转变视图控制器后仍然得到适当的旋转信息。所以这个问题与使用自定义过渡动画特别相关。

+0

发现在开发人员论坛这一职位:https://forums.developer.apple.com/thread/11612 建议的修复工程,但很hacky –

回答

0

,因为这似乎是一个实际的苹果的Bug我没有一个实际的答案。从这个forum雷达已经提交并显示解决问题的黑客。下面是我做的:

首先,我添加了这个扩展的UIViewController设置在我目前的视图层次顶视图中有它的框架匹配UIWindows框架,有效地旋转视图。

extension UIViewController { 
    func rotateTopView(view:UIView) { 
     if let superview = view.superview { 
      rotateTopView(view: superview) 
     } else { 
      view.frame = UIWindow().frame 
     } 
    } 
} 

其次,我加入到我的新rotateTopView方法的调用在我受到影响的viewControllers的viewWillAppear方法:

override func viewWillAppear(_ animated: Bool) {   
    // Hack to fix rotation issues 
    self.rotateTopView(view: view) 
} 

希望苹果公司将尽快修复后自定义动画问题旋转,但由于原始雷达已于2015年提交我并不屏住呼吸。

+0

哦,男人!感谢您添加此。我花了一段时间才弄明白这是导致我的屏幕动起来的NavigationController,但是你将它与动画链接起来的解释真的很有帮助。 – georryan