更新:
我意识到,我可能误解了原来的问题。但要正确回答这个问题,我需要澄清你在说什么。所以,你说:
我有一个UIViewController可以说,这就是所谓的A.内,我已经添加 另一UIViewController中称为B.我也在另一 的UIViewController对A,让称它为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
没有意义。无论如何,这是我原来的答复的基础上,假设你必须一直在谈论以下情形:
- 乙& C被通过
addChildViewController
增加,
- B是开始活跃,而在肖像,
- 你
transitionFromViewController:B toViewController:C
,
- 您旋转装置,景观和C得到旋转事件,但B没有,
- 你
transitionFromViewController
回到B现在视图控制器B接收外观相关的方法,如viewWillAppear
,但已经错过了任何旋转的事件而C是活跃
因此,如果您需要B到检查基于旋转逻辑在这种情况下,你必须在像B的viewWillAppear
方法来做到这一点(除非父视图控制器A在它做了transitionFromViewController:C toViewController:B
之后明确地调用了其他东西)。但是我现在意识到,你可能不关心轮换事件的存在或不存在,而只是当你检查框架时,你会得到奇怪的结果。但是我不太了解你描述的情况,所以我们继续回答你的其他问题。
所以,你继续说:
基本上当我在B的willAnimateToInterfaceRotation旋转 框架,无论停留取向相同。所以说B是在 肖像和大小是768 x 1004.
好的,我认为我们在那里很好。您继续:
然后我有一个按钮,在A中添加一个C(在C前面)的 。
你是说,你没有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
上做一些方向检查。
注意,如果不是加载所有控制器的前面,你的时间这样做只是(有点像标签视图控制器),这个问题就会消失。
这well..the默认是YES,那么它会自动将其转发。为什么我必须在viewWillAppear中做到这一点?接下来的方向变化会发生什么? – xonegirlz 2012-07-08 07:17:25
@xonegirlz我很抱歉,但我automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers只是一个玩笑/赞扬一个可怕的相关方法只是在外围与你原来的问题。我的主要观点是无关的这种方法,而是我的想法是,如果从小孩B到Child C级的容器中的转变,即小孩B不会收到旋转活动,所以如果你想要做旋转逻辑,你必须这样做当你转换回B.但我想我可能严重误解了你的问题,所以看到我上面修改的问题。 – Rob 2012-07-08 10:55:14
@xonegirlz顺便说一下,我在容器视图中理解'self.view.frame'时一定会看到一些奇怪的行为。我现在依赖子视图控制器的'self.view.frame',它似乎更可靠。我怀疑视图控制器遏制处理旋转事件时存在一些错误。 – Rob 2012-07-09 17:55:01