私は最近問題に遭遇しました。私の iPad アプリは、どういうわけか iPad の自動回転を妨げています。私のアプリは UISplitView をロードし、両方のビュー コントローラーが shouldAutorotateToInterfaceOrientation: に対して YES を返します。info.plist を設定して、4 つの方向すべてに「サポートされているインターフェイスの方向」キーを含めました。ただし、アプリを実行すると、デバイスを回転しても splitView は回転しません (UIDeviceOrientationDidChangeNotification を受け取っていても)。さらに、iPad のホーム画面で開始した別の方向でアプリを終了すると、アプリを実行せずに再度回転するまで、正しいビューに自動回転しません....どんなアイデアでも大歓迎です... .
6 に答える
UISplitViewController
私が今まで使用しなければならなかった最も気まぐれなView Controllerサブクラスの1つです。「完全に」動作させるには、アプリケーションのウィンドウに単一のルート ビューとして存在する必要があります。ただし、いくつかの策略でこれを回避できます。私の場合、ビュー コントローラーとしてUITabBarController
少なくとも 2 つの異なる が必要でした。UISplitViewController
UISplitViewControllerDelegate
Appleが将来UISplitViewController
、他のコンポーネントとの互換性を高めることを願ってUIKit
います...
2 つの従属 UINavigationController で同じ問題に遭遇しました。私の場合、左側のコントローラーで shouldAutorotateToInterfaceOrientation: をオーバーライドして常に「YES」を返すと、回転が機能し始めました。
私はこれがうまくいくことを発見しました-UISplitViewController
実装の両方の子を提供しshouldAutorotateToInterfaceOrientation
ます:
つまり、次のようなものがある場合:
MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil];
UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil];
UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController];
self.window.rootViewController = self.splitViewController;
次に両方を定義し、実装する必要がrootViewController
あります。NSApplication
MasterViewController
DetailViewController
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return YES;
}
回転が確実に機能するように。
UISplitViewController はルート ビュー コントローラーとして設定されていますか? そうでない場合は、それが問題の原因である可能性があります。私は同様の問題を抱えていました.ステータスバーは回転しますが、詳細ビューとマスタービューはそのまま残ります。UISplitViewController がルートになるようにビューを再配置し、「メイン メニュー」が分割ビューの上にモーダル ビュー コントローラーとして表示され、回転の問題が解消されました。
iPad プログラミング ガイドによると、「Split View Controller のビューは、常にアプリケーション ウィンドウのルート ビューとしてインストールする必要があります。」
お役に立てれば。
私は今同じ問題を抱えていました。その理由は、UISplitViewController のビューに加えて、誤って別のビューをウィンドウに追加してしまったためです。余分なビューを削除すると、機能しました。
あなたの最初の問題は、UISplitView が自動回転を妨げているということです。自動回転を有効にする代わりに、Splitview のサブクラスを使用してみてください。
@implementation SplitViewControllerRotating
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
NSLog(@"SplitViewControllerRotating shouldAutorotate");
return YES;
}
@end
あなたの2番目の問題は奇妙に聞こえます。アプリを終了した後、iPad がインターフェイスの向きを認識できるように、回転する必要があると言いました。それを手伝うことはできません。