我有一个UIViewController让我们说它叫做A.在A中,我添加了另一个名为B的UIViewController。我还在A上添加另一个UIViewController,让我们调用它C.我遇到的问题是,当C不是present(即:没有添加到A的视图控制器中)然后旋转给我正确的大小,但是当C被添加到A.然后UIViewContoroller的B没有收到正确的帧调整。为什么这样,我该如何解决这个问题?
基本上当我在B的willAnimateToInterfaceRotation中旋转时,无论方向如何,框架都保持不变。所以说B是纵向的,大小是768 x 1004.然后我有一个按钮,在A中加C(C在B的前面)。当我旋转它打印出框架的大小是768x1004。但是,如果我解除C(即:从父视图控制器中删除它,在这种情况下为A)。当我旋转框架宽度时,相应地改变。
答案 0 :(得分:3)
<强>更新强>
我意识到我可能误解了原来的问题。但要正确回答这个问题,我需要澄清你在说什么。所以,你说:
我有一个UIViewController让我们说它叫做A. A,我补充说 另一个名为B的UIViewController。我也在添加另一个 A上的UIViewController,我们称之为C。
所以,从本质上讲,你已经完成了以下工作?
[A addChildViewController:B];
[B didMoveToParentViewController:A];
[A addChildViewController:C];
[C didMoveToParentViewController:A];
我做对了吗?无论如何,你继续说:
我遇到的问题是,当C不存在时(即:未添加到A中) 视图控制器)然后旋转给我正确的大小,
那么,你是说你从来没有调用addChildViewController:C
一切都好吗?你继续:
......但是当C 添加到A.然后UIViewController的B没有收到 正确的帧调整。
那么,你是说你调用了addChildViewController:C
,并且有transitionFromViewController:B toViewController:C
?但如果是这样的话,B根本不会得到任何轮换事件。当你从B转换到C时,引用B.view.frame.size
是没有意义的。无论如何,这是我原来答案的基础,假设你一定是在讨论以下场景: / p>
addChildViewController
,transitionFromViewController:B toViewController:C
,transitionFromViewController
回到B,现在查看控制器B接收与外观相关的方法,例如viewWillAppear
,但在C处于活动状态时会错过任何轮换事件因此,如果在这种情况下需要B检查基于旋转的逻辑,则必须在B viewWillAppear
之类的方法中执行此操作(除非父视图控制器A在其之后显式调用其他内容) transitionFromViewController:C toViewController:B
)。但我现在意识到你可能并不关心旋转事件的存在与否,而只是当你检查框架时,你会得到奇怪的结果。但是我不太了解你所描述的情景,所以让我们继续你的其余问题。
所以,你继续说:
基本上当我在B中旋转willAnimateToInterfaceRotation时 无论方向如何,框架都保持不变。所以说B在 肖像,大小为768 x 1004.
好的,我认为我们在那里很好。你继续:
然后我有一个添加的按钮 A中的C(C在B前面)。
你是说你做过transitionFromViewController:B toViewController:C
吗?在视图控制器包含的上下文中,术语“在B前面”对我来说没有意义。 C不会在B前面转移。你从B转换到C.
旋转时打印出的尺寸 框架是768x1004。
这很奇怪。但是,更重要的是,什么是“768x1004”? C.view.frame.size
?如果你从B转换到C,我认为引用B.view.frame.size
是没有意义的。我不清楚你说的是报道“768x1004”。
无论如何,你继续:
但是,如果我解雇C(即:将其从中移除) 父视图控制器,在本例中为A)。当我旋转框架时 宽度相应变化。
当您说“将其从父级视图控制器中删除”时,我认为您的意思是:
transitionFromViewController:C toViewController:B
[C willMoveToParentViewController:nil]
[C removeFromParentViewController];
如果你能澄清你关于我对上述解释(或误解)的原始问题,那么我们确切地知道你在做什么?我肯定在容器中看到了一些关于框架尺寸的奇怪东西,但我想确保我先了解你的问题。
<强>原始强>
见automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
。说真的,谁提出了这个方法名称?!?
但是这不会将方法发送到非活动视图控制器。看起来您必须在子控制器viewWillAppear
上检查方向。
注意,如果不是预先加载所有控制器,而是及时完成(类似于标签视图控制器),这个问题就会消失。