1

私のアプリは主にナビゲーションコントローラースタックを使用しており、一部のコントローラーをモーダルに表示することもあります。ランドスケープモードでは、navコントローラースタック内のコントローラーは正常に機能しますが、presentViewControllerまたは以前のpresentModalViewControllerによって表示される他のビューコントローラーは、ポートレートとランドスケープの間で前後に回転する場合でも、常にポートレートサイズのビューフレーム(iPad iOS 6.0では常に768x1024)を提供します。

ビューコントローラに関連する種類は横向きモードですが、フレームを縦向きモードから取得していますか?しかし、チェックされた答えは役に立ちません。ナビゲーションスタックの一部として後のViewControllerを追加すると、最初の読み込みとその後の回転で発生するサイズ変更が機能します。この問題は、前述のように、presentViewControllerによってコントローラーを追加した場合にのみ発生します。

4

1 に答える 1

3

モーダル ブランチを別のナビゲーション コントローラーにラップし、そこで回転マスクを定義します。iOS6 では、- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)nav スタック ブランチでのみ動作し、ブランチ全体が同じように動作するはずです。

したがって、nav をサブクラス化します。

@interface CLNotRotatingNavController : UINavigationController

そしてその.mにこれを追加します

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

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL) automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
    return YES;
}

すべてのモーダル ブランチをこのナビゲーションにラップします。これにより、必要に応じてすべてが風景にロックされます。

于 2012-10-28T11:03:48.773 に答える