8

ポートレートモードで表示される UITabBarController があります。タブの 1 つに、UIViewController をモーダルに表示するボタンがあります (単純なストーリーボード セグエがアクションを実行します)。

このモーダル ビューをランドスケープ モードで表示したいのですが、自動的に回転させることができません。

私はこれをモーダルビューコントローラーに持っています

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

.plist でサポートされている方向に LandscapeLeft を追加しました (これにより、TabBar を回転させることもできますが、これは望ましくありません)。

これをモーダル ビューの ViewDidLoad にも追加しました

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

しかし、私はそれを自分で回転させることはできません。

ありがとう

編集 - -

shouldAutoRotate が呼び出されていないようです。

また、向きを検出しようとしていますが、以下のコードは向きに関係なく常に 2 を示しています!

if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortrait) {
        NSLog(@"1");
        self.hostView.frame = CGRectMake(0, 60, 200, 255);
    } else {
        NSLog(@"2");
        self.hostView.frame = CGRectMake(0, 45, 480, 255);
    }

編集2 ---

私の悪い。iOS 6 を使用していたことに言及する必要があったと思います。iOS 5 ではディスプレイが自動的に回転します。shouldAutorotateToInterfaceOrientation は廃止されたため、新しいメソッドを読む必要があります。

4

4 に答える 4

7

iOS 6.0リリースノート
「より多くの責任がアプリとアプリデリゲートに移っています。現在、iOSコンテナ(UINavigationControllerなど)は、自動回転する必要があるかどうかを判断するために子供に相談しません。」

-(BOOL)shouldAutorotateコンテナ(UINavigationControllerなど)の下のUIViewControllerは、IOS6から呼び出されません。

カテゴリを使用して既存のUINavigationControllerクラスにメソッドを追加するソリューションを試しました。

shouldAutorotateメソッド内で、 self.viewControllersの各ビューコントローラーでshouldAutorotateメソッドを呼び出すことができます。実際、子ViewControllerに渡すことができます。

于 2012-10-03T20:24:51.470 に答える
6

iOS6で強制的に回転させたい場合は、rootviewControllerで次のメソッドを実装する必要があります。

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL)shouldAutorotate {
    return YES;
}
于 2012-10-03T08:44:42.633 に答える
1

iOS 6では、この方法がiOS6で特定の向きを強制するのに役立つ可能性があるようです。

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

私はまだそれを機能させることを試みており、発見があれば更新します。

于 2012-09-24T19:07:27.613 に答える
0

私は自分のアプリでこれを正確に行い、shouldAutoRotateToInterfaceOrientation を介して行いますが、あなたとは少し異なります。

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
 if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
  return (YES);
 return (NO);
}

iOS 6 の場合は、window.rootViewController = {your root View Controller}; も設定する必要があります。あなたのアプリデリゲートで。これがあなたの問題であることを願っています

于 2012-08-21T18:14:16.977 に答える