如何处理不在 UINavigationController 堆栈顶部的 UIViewController 的旋转?

How to handle rotation for a UIViewController that isnt on top of UINavigationController stack?(如何处理不在 UINavigationController 堆栈顶部的 UIViewController 的旋转?)

本文介绍了如何处理不在 UINavigationController 堆栈顶部的 UIViewController 的旋转?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 UINavigationController 中有一个根 UIViewController (VC1),它通过在 willRotateToInterfaceOrientation: 方法中手动调整其视图/子视图帧来处理旋转.如果根 UIViewController 是活动视图控制器,则旋转工作正常,基本上位于堆栈顶部.

I have a root UIViewController (VC1), inside a UINavigationController, which handles rotation by adjusting its views/subviews frames manually in the willRotateToInterfaceOrientation: method. The rotation works fine if the root UIViewController is the active view controller, basically on top of the stack.

当我将另一个 UIViewController (VC2) 推到 NavigationController 上时,就会出现问题.然后我旋转VC2,它工作正常.但是,当我弹出 VC2 时,问题是 VC1 没有旋转到正确的方向,它的 willRotateToInterfaceOrientation: 方法也没有被调用?VC1 中的 shouldAutorotateToInterfaceOrientation: 方法被调用,仅此而已.

The problem occurs when i push another UIViewController (VC2) onto the NavigationController. I then rotate VC2 which works fine. However when i pop VC2 the problem is that VC1 has not rotated to the correct orientation, nor does its willRotateToInterfaceOrientation: method get called?? The shouldAutorotateToInterfaceOrientation: method in VC1 is called but thats it.

那么我的问题是我应该如何确保我的 UIViewController VC1 已经针对这种情况的当前方向进行了更新??

My question then is how am i supposed to make sure that my UIViewController VC1 has been updated for the current orientation for this type of situation??

推荐答案

我解决这个问题的方法是检查 viewWillAppear: 看现在的方向是否与 viewDidDisappear 被调用.如果是这样,我调用代码来布局视图.

The way I resolve this is to check on viewWillAppear: to see if the orientation is now different to when viewDidDisappear was called. If so I call the code to layout the view.

要采用这种方法,首先将负责布局视图的代码分解为类似 _layoutViews 的代码,可以在 viewWillAppear 中简单地调用它>willRotateToInterfaceOrientation:.

To adopt this approach first factor the code responsible for laying out the view into something like _layoutViews, can simply call it as required in viewWillAppear as well as in willRotateToInterfaceOrientation:.

这篇关于如何处理不在 UINavigationController 堆栈顶部的 UIViewController 的旋转?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何处理不在 UINavigationController 堆栈顶部的 UIViewController 的旋转?

基础教程推荐