1

ビューがUIViewControllerに埋め込まれているUINavigationControllerがあります。デバイスを回転させると、NavigationController はwillRotate didRotateイベントを完全に受け取りました。ただし、UINavigationController 内の現在表示されているビュー コントローラーの前にプッシュされた UIViewControllers は、回転イベントを受け取りません。

問題は次のとおりです。2番目のviewControllerがnavigationControllerに表示されていますが、デバイスを回転させると、ViewControllerは回転に応じてレイアウトを変更します。ビューコントローラーをポップして最初のビューコントローラーに戻ると、回転したビューの再レイアウトメソッドを呼び出さないため、最初のビューコントローラーは縦向きレイアウトに従って表示されます。

デフォルトの回転メソッドが通常どおり自動的に呼び出されるため、通常はすでに正しく動作しているため、回転変更のオブザーバーを追加したくありません...

この状況で何ができますか?

手動で willRotate 関数を呼び出して実行しましたが、これが良いとは思いません。

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    UIInterfaceOrientation io=[[UIApplication sharedApplication] statusBarOrientation];

    [self willRotateToInterfaceOrientation:io duration:0.3];

    for(int i=0;i<self.childViewControllers.count;i++){
        [[self.childViewControllers objectAtIndex:i]willRotateToInterfaceOrientation:io duration:0.3];
    } 
}
4

2 に答える 2

0

あなたが言及したコードは正しくありません..デリゲートメソッドを明示的に呼び出すべきではありません。自動回転機能を搭載したいviewControllersに以下の関数を実装してください。許可された向きにチェックを入れることで、必要な向きに基づいて回転を制限することもできます。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
       return YES;
} 
于 2013-10-05T17:31:15.073 に答える