Ios UINavigationController自定义转换,防止堆栈中不可见的视图控制器旋转
我已经学习了各种教程,并下载了多个版本的自定义UINavigationController自定义过渡动画示例:Ios UINavigationController自定义转换,防止堆栈中不可见的视图控制器旋转,ios,uinavigationcontroller,uiviewanimation,uiviewanimationtransition,Ios,Uinavigationcontroller,Uiviewanimation,Uiviewanimationtransition,我已经学习了各种教程,并下载了多个版本的自定义UINavigationController自定义过渡动画示例: - 我写的和下载的都有同样的问题。显示新的视图控制器后,如果旋转设备,然后导航回,则堆栈中以前的视图控制器中没有一个已旋转。通过使用自定义动画,我将视图控制器从UINavigationControllers子控制器中移除,因此它不会发送向下接收的任何旋转消息 有人碰到过这个吗?我和其他人都做错了什么吗?或者这是使用UINavigationControllers定制过渡动画的意外结
- -
在上面写了none之后,它让我想到如果我的一个转换不是自定义的,会发生什么,所以我测试了这一点,并且非自定义动画转换没有这个问题,从中转换的视图控制器仍然会得到相应的旋转消息。因此,这个问题特别与使用自定义过渡动画有关。我没有实际的答案,因为这似乎是一个实际的苹果Bug。从这一点上,一个雷达被归档,一个修复问题的黑客被显示出来。以下是我所做的: 首先,我将此扩展添加到UIViewController,以设置当前视图层次结构中的俯视图,使其框架与UIWindows框架匹配,从而有效地旋转视图
extension UIViewController {
func rotateTopView(view:UIView) {
if let superview = view.superview {
rotateTopView(view: superview)
} else {
view.frame = UIWindow().frame
}
}
}
其次,我添加了对受影响的ViewController的myViewWillDisplay
方法中新的rotateTopView
方法的调用:
override func viewWillAppear(_ animated: Bool) {
// Hack to fix rotation issues
self.rotateTopView(view: view)
}
希望苹果能在定制动画发布后尽快修复旋转,但鉴于原始雷达是在2015年提交的,我不会屏息以待。在开发者论坛上找到了这篇帖子:提议的修复方案很有效,但非常老练!谢谢你添加这个。我花了一段时间才弄明白是导航控制器使我的屏幕出现了问题,但是你的解释将它与动画联系起来确实很有帮助。