7

私のアプリrootViewControllernavgationController.

プッシュされたコントローラーが見つかりました

-(BOOL)shouldAutorotateが呼び出されていません。

-(NSUInteger)supportedInterfaceOrientations一度だけ呼び出されます。

xcode'sプロジェクトの概要 (またはplist) で Windows のすべての向きのサポートを正しく確認しました。

向きを変更するためにプログラムで実行したいuicontrolポジショニングコードがあるため、これらのメソッドを呼び出す必要があります。

(カテゴリ)ナビゲーションコントローラーの次のメソッドをオーバーライドすることで、この問題を解決しました

-(BOOL)shouldAutorotate;

-(NSUInteger)supportedInterfaceOrientations;

どのコントローラーがプッシュされているかを確認し、それに応じて、ナビゲーションコントローラーの次のメソッドで、それぞれのプッシュされたコントローラーの uicontrol ポジショニングコードを呼び出しました

(NSUInteger)supportedInterfaceOrientations;

これはうまく機能していますが、これが正しい方法だとは思いません。より良い解決のために私を助けてください。

4

5 に答える 5

27

次のリンクを確認できます。自動回転をサポートするには、カスタム ナビゲーションを作成する必要があります。

http://mobileappdevpage.blogspot.in/2012/11/how-to-use-should-autorotateios-6-with.html

UINaviagationController のカテゴリを作成することでこれを行うことができる別の方法

.h ファイルのコードは

@interface UINavigationController (autorotation)

-(BOOL)shouldAutorotate;
-(NSUInteger)supportedInterfaceOrientations;

.mファイルのコードは

@implementation UINavigationController (autorotation)

-(BOOL)shouldAutorotate
{

    UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;
    [self.topViewController shouldAutorotate];
    return YES;

}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;

}
@end
于 2012-11-29T05:43:37.383 に答える
1

ナビゲーションコントローラーでも同じ問題に直面しました。プッシュされたすべてのビュー コントローラーの場合は問題なく動作しますが、私のシナリオはまったく異なり、1 つのビュー コントローラーがルートとしてナビゲーション コントローラー (ViewControllerParent) にプッシュされました。

NavController
            -- rootViewController (ViewControllerParent)
                                          --- ViewControllerChild1
                                          --- ViewControllerChild2

プロジェクトの要件により、ViewControllerParent をベースとして保持し、ユーザーのアクションに基づいて子ビューコントローラーのビューをサブビューとして親に追加していました。ここで、Child1 を回転させず、Child2 を回転させたいというシナリオがありました。

私が直面した問題は、ナビゲーション コントローラー クラスの [self.topViewController] が、子をナビゲーション スタックにプッシュしていないため、常に親オブジェクトを返すことでした。したがって、Childs の shouldAutorotate メソッドが呼び出されることはありません。そのため、親の shouldAutorotate メソッドにクラス チェックを入れてから、回転値を返す必要がありました。親クラス(ViewControllerParent)でこのようなことをしましたが、これは一種の回避策ですが、問題を修正しました

-(BOOL)shouldAutorotate
{
  BOOL allowRotation = YES;

   if ([currentlyLoadedChild isKindOfClass:[Child1 class]])
   {
       allowRotation = NO;
   }
   if ([currentlyLoadedChild isKindOfClass:[Child2 class]])
   {
       allowRotation = YES;
   }
   return allowRotation;
} 

-アヌープ

于 2013-01-24T15:00:02.947 に答える
0

インターフェイスの向きは、次の方法で確認できます。

[UIApplication sharedApplication].statusBarOrientation

ビューコントローラがロードされたとき、たとえばviewWillAppear。そこで、サブビューのレイアウトを行うことができます。ビューが表示shouldAutorotateされると、デバイスが回転するたびに呼び出されます。

于 2012-10-10T20:35:05.373 に答える
0

UINavigationController をオーバーライドすることは正しいアプローチですが、プッシュ コントローラーの supportedInterfaceOrientations を正しい方法でチェックしているかどうかはわかりません。

ここで私の答えを見てください: https://stackoverflow.com/a/12669343/253008

于 2012-10-10T20:36:30.177 に答える
0

同じ問題がありました。この回答を確認してください 。ShouldAutoRotate を適用するのではなく、優れたアプローチです

于 2015-12-03T05:32:51.943 に答える