10

UINavigationControllerサブクラスを my として持っているアプリがありrootViewControllerます。UITableViewControllerユーザーがいくつかの設定を編集できるようにしています。常に縦向きモードにする必要があります。私のアプリは、MoviePlayer コンポーネントをナビゲーション コントローラーにプッシュした後、他のすべての向きもサポートする必要があります。

UITableViewControllerサブクラスには、supportedInterfaceOrientations の次の実装があります。

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

logging コマンドは、これが実際に呼び出されることを示しています。

問題は、戻り値が尊重されないことです。つまり、デバイスを回転させると画面が横向きになります。

設定ビューを常に縦向きに表示し、ビデオ ビューアーの向きを変更できるようにするにはどうすればよいですか?

詳細: 私のUINavigationControllerサブクラスは shouldAutorotate または supportedInterfaceOrientations をオーバーライドしません。実装していません

   - (NSUInteger)application:(UIApplication *)application 

supportedInterfaceOrientationsForWindow:(UIWindow *)window

AppDelegateのメソッドで、ターゲットの概要ですべての向きを有効にしました。

4

3 に答える 3

17

ViewControllersナビゲーション スタックの一部はすべての向きをサポートし、一部は縦向きのみをサポートするという問題がありましたが、UINavigationコントローラーはアプリでサポートされているすべての向きを返していました。この小さなハックが役に立ちました。

@implementation UINavigationController (iOS6OrientationFix)

-(NSUInteger) supportedInterfaceOrientations {
    return [self.topViewController supportedInterfaceOrientations];
}

@end
于 2012-09-23T21:31:54.570 に答える
2

UINavigationController私のために働いていないためのカテゴリ。どうしてか分かりません。私はそのようなカテゴリーで私の問題を解決しますUIViewController

@implementation UIViewController (Orientation)

- (BOOL) shouldAutorotate
{
    return YES;
}


- (NSUInteger)supportedInterfaceOrientations
{
    NSUInteger orientations = UIInterfaceOrientationMaskPortrait;

    if ([self isKindOfClass:[PlayerViewController class]])
    {

        orientations |= UIInterfaceOrientationMaskLandscapeLeft;
        orientations |= UIInterfaceOrientationMaskLandscapeRight;

    }

    return orientations;
}

@end
于 2012-12-05T15:04:41.700 に答える
2

以下も追加する必要があります。

- (BOOL)shouldAutorotate {
    return NO;
}

アプリの plist ファイルでルートビュー コントローラーのサポートされている回転を only に設定しportraitます。

于 2012-09-23T19:27:02.940 に答える