我已经按照各种教程并下载了多个版本的自定义UINavigationController自定义过渡动画示例:
我写的和我下载的内容都遭遇同样的问题。在呈现新的视图控制器之后,如果我旋转设备然后向后导航,则已经旋转了堆栈中先前视图控制器的无。感觉就像使用自定义动画一样,我已经从UINavigationControllers子控制器中删除了视图控制器,因此它不会发送它收到的任何旋转消息。
有没有人碰到这个?我和其他所有人做错了吗?或者这是使用UINavigationControllers定制过渡动画的无意结果吗?
我已经在设备和模拟器上测试了相同的结果。
在上面写了 none 后,我想到如果我的一个转换不是自定义会发生什么,所以我测试了这个并且非自定义动画转换没有这个问题,视图控制器从仍然得到适当的旋转消息转换。所以这个问题与使用自定义过渡动画有关。
答案 0 :(得分:0)
我没有真正的答案,因为这似乎是一个真正的Apple Bug。从这个forum已经提交了一个雷达,并且显示了解决问题的黑客攻击。这是我做的:
首先,我将此扩展添加到UIViewController,以设置当前视图层次结构中的顶视图,使其框架与UIWindows框架匹配,从而有效地旋转视图。
extension UIViewController {
func rotateTopView(view:UIView) {
if let superview = view.superview {
rotateTopView(view: superview)
} else {
view.frame = UIWindow().frame
}
}
}
第二,我在受影响的viewControllers的rotateTopView
方法中添加了对我的新viewWillAppear
方法的调用:
override func viewWillAppear(_ animated: Bool) {
// Hack to fix rotation issues
self.rotateTopView(view: view)
}
希望Apple很快就能解决定制动画问题后的轮换问题,但考虑到原始雷达是在2015年提交的,我并没有屏住呼吸。