Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UINavigationController自定义转换,防止堆栈中不可见的视图控制器旋转_Ios_Uinavigationcontroller_Uiviewanimation_Uiviewanimationtransition - Fatal编程技术网

Ios UINavigationController自定义转换,防止堆栈中不可见的视图控制器旋转

Ios UINavigationController自定义转换,防止堆栈中不可见的视图控制器旋转,ios,uinavigationcontroller,uiviewanimation,uiviewanimationtransition,Ios,Uinavigationcontroller,Uiviewanimation,Uiviewanimationtransition,我已经学习了各种教程,并下载了多个版本的自定义UINavigationController自定义过渡动画示例: - 我写的和下载的都有同样的问题。显示新的视图控制器后,如果旋转设备,然后导航回,则堆栈中以前的视图控制器中没有一个已旋转。通过使用自定义动画,我将视图控制器从UINavigationControllers子控制器中移除,因此它不会发送向下接收的任何旋转消息 有人碰到过这个吗?我和其他人都做错了什么吗?或者这是使用UINavigationControllers定制过渡动画的意外结

我已经学习了各种教程,并下载了多个版本的自定义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的my
ViewWillDisplay
方法中新的
rotateTopView
方法的调用:

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

希望苹果能在定制动画发布后尽快修复旋转,但鉴于原始雷达是在2015年提交的,我不会屏息以待。

在开发者论坛上找到了这篇帖子:提议的修复方案很有效,但非常老练!谢谢你添加这个。我花了一段时间才弄明白是导航控制器使我的屏幕出现了问题,但是你的解释将它与动画联系起来确实很有帮助。