菜鸟教程小白 发表于 2022-12-12 23:54:49

即使被告知不要,iOS6 方向仍在旋转


                                            <p><p>我的 iOS 应用程序似乎有问题。</p>
<p>它的部署目标是iOS5.0,但是我使用的是iOS 6.0 SDK。</p>
<p>在我的 ViewController 中,我有:</p>
<pre><code>-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}
</code></pre>
<p>这在 iOS5 模拟器中运行时可以正常工作。
View 不会旋转到 LandScape 或倒置。</p>
<p>但是,在 IOS6 模拟器中(以及在设备上),它将继续旋转。</p>
<p>我使用 <code>NSLog</code> 来检查 <code>-supportedInterfaceOrientations</code> 确实被调用了,它确实被调用了两次,但它仍然旋转到 LandScape(右或左)</p>
<p>我做错了什么?</p>
<p>我还扩展了 <code>UINavigationController</code>(我的 Root ViewController )以包含以下内容:</p>
<pre><code>@implementation UINavigationController (Rotation_IOS6)

-(BOOL)shouldAutorotate
{
    return [ shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations
{   
    return [ supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [ preferredInterfaceOrientationForPresentation];
}

@end
</code></pre>
<p>但还是没有成功。</p>
<h2>编辑</h2>
<p>根据马特的回答。我还需要使用与我的 UINavigationController 类似的实现来扩展 UITabBarController 并且这很有效。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>问题可能是您有一个导航界面。你?如果是这样,您需要继承 UINavigationController 并使用该子类的实例作为导航 Controller 。在该子类中,<em>that</em> 是您实现 <code>supportedInterfaceOrientations</code> 的地方。对于任何父 ViewController (例如 UITabBarController)也是如此。</p>

<p>原因是 iOS 6 对旋转的思考方式与 iOS 5<em>完全</em>不同。你认为你从 iOS 5 知道的任何东西都不再适用。在 iOS 6 中,我们从应用程序本身的级别开始,然后通过应用程序委托(delegate)到 Root ViewController 或其他全屏 ViewController (例如呈现的 ViewController )和 <em>stop</em> . parent 不再咨询其子女。</p>

<p>此外,应用程序本身(通过 info.plist 或应用程序委托(delegate))必须列出应用程序的<em>任何</em>部分可以<em>永远<em>每个</em>方向</em> 假设; ViewController 只能请求其中的 <em>子集</em>。</p>

<p>查看发行说明:</p>

<p> <a href="http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html" rel="noreferrer noopener nofollow">http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html</a> </p>

<p>但是,请注意,这句话是谎言:</p>

<blockquote>
<p>For compatibility, view controllers that still implement the shouldAutorotateToInterfaceOrientation: method do not get the new autorotation behaviors</p>
</blockquote>

<p>相反,在 iOS 6 中,旧的自动旋转方法被完全忽略了;每个人都会得到新的自转行为。这不是“选择加入”。</p></p>
                                   
                                                <p style="font-size: 20px;">关于即使被告知不要,iOS6 方向仍在旋转,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/13755816/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/13755816/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: 即使被告知不要,iOS6 方向仍在旋转