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><key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
</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]