菜鸟教程小白 发表于 2022-12-13 14:34:39

iphone - UIViewController 包含方向更改


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

<p>基本上,当我在 B 的 willAnimateToInterfaceRotation 中旋转时,无论方向如何,框架都保持不变。所以说B是纵向的,尺寸是768 x 1004。然后我有一个在A中添加C的按钮(C在B前面)。当我旋转它时,它打印出框架的大小是 768x1004。但是,如果我关闭 C(即:从父 ViewController 中删除它,在本例中为 A)。当我旋转框架时,宽度会相应改变。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><strong>更新:</strong></p>

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

<blockquote>
<p>I have a UIViewController lets say it&#39;s called A. Inside A, I&#39;ve added
another UIViewController called B. I am also adding another
UIViewController on A, lets call it C.</p>
</blockquote>

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

<pre><code>;
;
;
;
</code></pre>

<p>我说对了吗?不管怎样,你继续说:</p>

<blockquote>
<p>The issue I am having is, when C is not present (i.e: not added to A&#39;s
view controller) then the rotation gives me the right size,</p>
</blockquote>

<p>那么,你是说你从来没有调用过 <code>addChildViewController:C</code> 来表示一切正常吗?你继续:</p>

<blockquote>
<p>... but when C
is added to A. Then the UIViewController&#39;s B did not receive the
correct frame adjustment.</p>
</blockquote>

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

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

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

<p>所以,你继续说:</p>

<blockquote>
<p>Basically when I rotate in B&#39;s willAnimateToInterfaceRotation the
frame stays the same regardless of orientation. So say B is in
portrait and the size is 768 x 1004. </p>
</blockquote>

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

<blockquote>
<p>I then have a button that adds in
C in A (C is in front of B). </p>
</blockquote>

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

<blockquote>
<p>When I rotate it prints out the size of
the frame is 768x1004. </p>
</blockquote>

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

<p>不管怎样,你继续:</p>

<blockquote>
<p>However, if I dismiss C (i.e: remove it from
the parent&#39;s view controller, in this case A). When I rotate the frame
width changes accordingly.</p>
</blockquote>

<p>当您说“从父 ViewController 中删除它”时,我假设您的意思是:</p>

<ul>
<li>调用<code>transitionFromViewController:C toViewController:B</code></li>
<li>用 <code></code></li> 警告 C 它将消失
<li>然后用 <code>;</code></li> 将其移除
</ul>

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

<p><strong>原文:</strong></p>

<p>见 <a href="http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers" rel="noreferrer noopener nofollow"><code>automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers</code></a> .说真的,这个方法名是谁想出来的?!?</p>

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

<p>注意,如果不是预先加载所有 Controller ,而是及时加载(有点像标签 ViewController ),这个问题就会消失。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - UIViewController 包含方向更改,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/11380220/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/11380220/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - UIViewController 包含方向更改