gpt4 book ai didi

iphone - UIViewController 包含方向更改

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:14:57 25 4
gpt4 key购买 nike

我有一个 UIViewController 可以说它叫做 A。在 A 内部,我添加了另一个 UIViewController 叫做 B。我还在 A 上添加了另一个 UIViewController,我们称之为 C。我遇到的问题是,当 C 不是present(即:未添加到 A 的 View Controller )然后旋转给我正确的大小,但是当 C 添加到 A 时。然后 UIViewContoroller 的 B 没有收到正确的框架调整。为什么会这样,我该如何解决?

基本上,当我在 B 的 willAnimateToInterfaceRotation 中旋转时,无论方向如何,框架都保持不变。所以说 B 是纵向的,尺寸是 768 x 1004。然后我有一个按钮,可以在 A 中添加 C(C 在 B 前面)。当我旋转时,它打印出框架的大小为 768x1004。但是,如果我关闭 C(即:将其从父 View Controller 中删除,在本例中为 A)。当我旋转时,框架宽度会相应变化。

最佳答案

更新:

我意识到我可能误解了原来的问题。但要正确回答这个问题,我需要澄清你在说什么。所以,你说:

I have a UIViewController lets say it's called A. Inside A, I've added another UIViewController called B. I am also adding another UIViewController on A, lets call it C.

那么,从本质上讲,您已经完成了以下操作?

[A addChildViewController:B];
[B didMoveToParentViewController:A];
[A addChildViewController:C];
[C didMoveToParentViewController:A];

我做对了吗?不管怎样,你继续说:

The issue I am having is, when C is not present (i.e: not added to A's view controller) then the rotation gives me the right size,

那么,您是说您从未调用过 addChildViewController:C 一切正常吗?你继续:

... but when C is added to A. Then the UIViewController's B did not receive the correct frame adjustment.

那么,您是说如果您调用了 addChildViewController:C,并且有 transitionFromViewController:B toViewController:C?但如果是这样的话,B 根本得不到任何轮换事件。当你从 B 过渡到 C 时,引用 B.view.frame.size 对我来说没有意义。无论如何,这是我原来的答案的基础,假设你必须一直在谈论以下场景:

  • B & C 通过addChildViewController 添加,
  • B 最初在纵向时处于事件状态,
  • transitionFromViewController:B toViewController:C,
  • 您将设备旋转到横向,C 获得旋转事件但 B 没有,
  • transitionFromViewController 回到 B,现在 View Controller B 接收与外观相关的方法,例如 viewWillAppear,但在 C 处于事件状态时会错过任何旋转事件

因此,如果您需要 B 在这种情况下检查基于旋转的逻辑,则必须在 B 的 viewWillAppear 之类的方法期间执行此操作(除非父 View Controller A 显式调用其他内容在执行 transitionFromViewController:C toViewController:B 之后。但我现在意识到,您可能并不关心旋转事件的存在与否,而只是关心当您检查框架时,您会得到奇怪的结果。但是我不太明白你描述的情况,所以让我们继续你的问题的其余部分。

所以,你继续说:

Basically when I rotate in B's willAnimateToInterfaceRotation the frame stays the same regardless of orientation. So say B is in portrait and the size is 768 x 1004.

好的,我认为我们在那里很好。你继续:

I then have a button that adds in C in A (C is in front of B).

你是说你做了 transitionFromViewController:B toViewController:C?在 View Controller 包含的上下文中,术语“在 B 前面”对我来说没有意义。 C 不会走在 B 前面。您从 B 过渡到 C。

When I rotate it prints out the size of the frame is 768x1004.

这很奇怪。但是,更重要的是,“768x1004”是什么意思? C.view.frame.size?如果你从 B 过渡到 C,我认为引用 B.view.frame.size 没有意义。我不清楚你说的是报告“768x1004”。

无论如何,你继续:

However, if I dismiss C (i.e: remove it from the parent's view controller, in this case A). When I rotate the frame width changes accordingly.

当您说“将其从父 View Controller 中删除”时,我假设您的意思是:

  • 已调用 transitionFromViewController:C toViewController:B
  • 通过 [C willMoveToParentViewController:nil]
  • 警告 C 它将消失
  • 然后使用 [C removeFromParentViewController];
  • 删除它

如果你能澄清你最初关于我上面的解释(或误解)的问题,那么我们就知道你在做什么?我确实在容器中看到了一些关于框架尺寸的奇怪东西,但我想确保我首先理解你的问题。

原文:

参见 automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers .说真的,这个方法名是谁想出来的?!?

但这不会将方法发送到非事件 View Controller 。看起来您必须对子 Controller 的 viewWillAppear 进行一些方向检查。

请注意,如果不是预先加载所有 Controller ,而是及时加载(有点像选项卡 View Controller ),这个问题就会消失。

关于iphone - UIViewController 包含方向更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11380220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com