菜鸟教程小白 发表于 2022-12-12 21:20:27

iphone - 仅允许在 UITabViewController 中将一个选项卡的方向更改为横向


                                            <p><p>这可能吗?我怎样才能做到这一点?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><blockquote>
<p>Not possible according to Apple Docs.</p>
</blockquote>

<p><em>可能</em>这个词可能需要一个星号。看起来 Apple 并没有设想(或想要)你这样做。但是,根据您的要求,可能会有一种解决方法。</p>

<p><strong>免责声明:</strong>这是一种黑客行为。我并不是说这是一个好的 UI,只是想向 Eli 展示什么是可能的。</p>

<p>我构建了一个示例,从用于构建<strong>选项卡式应用程序</strong>的 Xcode 模板开始。它有两个 ViewController :<code>FirstViewController</code> 和 <code>SecondViewController</code>。我决定将 <code>FirstViewController</code> 设为仅横向 View 。在 Interface Builder(Xcode UI 设计模式)中,我将 FirstViewControllerView 的方向设置为横向,并将其尺寸设置为 480 宽 x 251 高(这里我假设 iPhone/iPod)。</p>

<h2>解决方案</h2>

<p>现在,似乎有必要让所有标签栏的 ViewController <strong>声称</strong>支持自动旋转到纵向和横向。例如:</p>

<pre><code>- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
</code></pre>

<p>所以,我的两个 ViewController 都有相同的代码。但是,我在 <code>FirstViewController</code> 中所做的也是覆盖 <code>willAnimateToInterfaceOrientation:duration:</code> 并且基本上 <em>undo</em> 什么是 <code>UIViewController</code> 基础设施确实如此,仅适用于这个仅横向 ViewController 。</p>

<p>FirstViewController.m:</p>

<pre><code>- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
    ;

    CGAffineTransform viewRotation;
    CGRect frame;

    if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
      viewRotation = CGAffineTransformIdentity;
      // TODO: change to dynamically account for status bar and tab bar height
      frame = CGRectMake(0, 0, 480, 320 - 20 - 49);      
    } else {
      viewRotation = CGAffineTransformMakeRotation(M_PI_2);
      // TODO: change to dynamically account for status bar and tab bar height
      frame = CGRectMake(0, 0, 320, 480 - 20 - 49);      
    }

    // undo the rotation that UIViewController wants to do, for this view heirarchy
    ;
    ;

    self.view.transform = viewRotation;
    self.view.frame = frame;

    ;
}
</code></pre>

<p>您得到的结果是标签栏将始终随设备旋转。这可能是一个要求,让您的双方向 View (例如 <code>SecondViewController</code>)进行自动旋转。但是,<code>FirstViewController</code> 的实际 View 内容现在不会旋转。无论用户如何转动设备,它都会保持横向。那么,也许这对您来说已经够用了?</p>

<p>还要注意:</p>

<p><strong>1)</strong> 我更改了应用的 info plist 文件以将 <strong>initial</strong> 方向设置为横向(因为我的 <code>FirstViewController</code> 是横向的): </p>

<pre><code>&lt;key&gt;UISupportedInterfaceOrientations&lt;/key&gt;
&lt;array&gt;
    &lt;string&gt;UIInterfaceOrientationPortrait&lt;/string&gt;
    &lt;string&gt;UIInterfaceOrientationLandscapeLeft&lt;/string&gt;      
    &lt;string&gt;UIInterfaceOrientationLandscapeRight&lt;/string&gt;
&lt;/array&gt;
&lt;key&gt;UIInterfaceOrientation&lt;/key&gt;
&lt;string&gt;UIInterfaceOrientationLandscapeRight&lt;/string&gt;
</code></pre>

<p><strong>2)</strong> 在 FirstViewController.xib 中,我将主/父 <code>UIView</code> 设置为 <strong>不自动调整 subview </strong>。根据您的 View 层次结构,您可能也希望在其他 subview 中更改此属性。您可以尝试该设置。</p>

<p>现在,横向 View 的可用大小确实会发生一些变化,因为状态栏和标签栏会旋转。因此,您可能需要稍微调整布局。但是,基本上,无论用户如何拿着他们的设备,您仍然会获得一个<em>宽</em> View 来显示横向内容。</p>

<h2>结果</h2>

<p> <a href="http://www.youtube.com/watch?v=rB_8mAMB2k8" rel="noreferrer noopener nofollow">Watch Youtube demo of running app</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 仅允许在 UITabViewController 中将一个选项卡的方向更改为横向,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10889728/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10889728/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 仅允许在 UITabViewController 中将一个选项卡的方向更改为横向