1

iOS5とiOS6用のアプリを作成しています。このUIViewControllerをUINavigationController内に配置し、ポートレートモードのままにしておきたい。

コードはiOS5で機能しますが、iOS6では機能しません。

// iOS5 rotation
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if (interfaceOrientation == UIInterfaceOrientationPortrait)
        return YES;
    else
        return NO;
}

// iOS6 rotation
- (BOOL)shouldAutorotate
{

    return YES;


}
- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;

}

ここでの問題は何ですか?SOで私はたくさんの同様の質問を見つけました、しかし一般的に答えは私のために働いていません。

編集: 正確ではなかったかもしれませんが、すべてのアプリではなく、ポートレートモードを維持するには、SINGLEビューコントローラー(アプリのホームページ)が必要です。

4

2 に答える 2

7

まず第一に、UIViewController が埋め込まれているコントローラーに大きく依存します。

たとえば、UINavigationController の内部にある場合、その UINavigationController をサブクラス化して、このような方向メソッドをオーバーライドする必要がある場合があります。

サブクラス化された UINavigationController (階層の最上位のビューコントローラーが方向を制御します) は、self.window.rootViewController として設定する必要があります。

- (BOOL)shouldAutorotate
 {
     return self.topViewController.shouldAutorotate;
 }
 - (NSUInteger)supportedInterfaceOrientations
 {
     return self.topViewController.supportedInterfaceOrientations;
 }

iOS 6 から、UINavigationController がその UIVIewControllers に向きのサポートを要求しないようになりました。したがって、サブクラス化する必要があります。

さらに

次に、PORTRAITモードのみが必要なUIViewControllersの場合、これらの関数を記述します

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskPortrait);
}

LANDSCAPE も必要とする UIViewController の場合は、マスキングを All に変更します。

- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskAllButUpsideDown);
    //OR return (UIInterfaceOrientationMaskAll);
}

ここで、向きが変わったときに何らかの変更を加えたい場合は、この関数を使用します。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{

}

非常に重要

AppDelegate で、これを記述します。これは非常に印象的です。

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
     return (UIInterfaceOrientationMaskAll);
}

すべてのビューコントローラーにポートレート モードのみを提供する場合は、ポートレート マスクを適用します。つまり、UIInterfaceOrientationMaskPortrait

それ以外の場合、一部の UIViewController を縦長のままにし、他の UIViewController をすべての向きに対応させたい場合は、ALL マスクを適用します。つまり、UIInterfaceOrientationMaskAll

于 2012-10-10T06:57:31.143 に答える