3

iOS 6 で画面の回転を処理するすべての方法 (ここ、Apple のドキュメント、および激しいグーグル) を読んだ後、何日も何日も xib を使用しているとき、私はまだこれにこだわっています。

私が達成しようとしているのは、いくつかのiPadのみのxibを使用することです。横向きのみで、残りのアプリは縦向きです。

ストーリーボードを使用していた場合、nav コントローラーをサブクラス化して回転をオーバーライドする方法は理解していますが、私は xib を使用していません。

私のアプリデリゲートで:

ICHomeController *homeController = [[ICHomeController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:homeController];
navController.navigationBarHidden = YES;
navController.navigationBar.barStyle = UIBarStyleBlackOpaque;
navController.navigationBar.tintColor = [UIColor grayColor];
self.navigationController = navController;
[self.window setRootViewController:self.navigationController];
[self.window makeKeyAndVisible];
return YES;

ここでのすべてのソリューションのように見えるものを試すことに加えて、私は自分のビューコントローラーで明らかなことを試しましたが、iOS 6 では呼び出されないことを理解しています。

// Older versions of iOS (deprecated)
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}


 - (BOOL)shouldAutorotate {
return YES;
 }


 - (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
 }


 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeLeft;
}
4

2 に答える 2

3

私は、より複雑なナビゲーション構造で何日もこれと戦ってきました。

基本的なルールは、それが UINavigationController、UITabBarController、または単純な UIViewController であるかどうかにかかわらず、ROOT コントローラーが回転を制御することです。したがって、UIViewControllers をスタックに PUSH すると、最初のコントローラーが引き続き回転を制御します。

モーダル ビューを使用する場合、このモデル ビューは、閉じられるまでスタックの ROOT と見なされます。したがって、モーダル UIViewController を表示し、その上にビューをプッシュすると、モーダル ビューとして表示された UIViewController が回転を制御します。モーダル ビューで presentViewController:animated:completion を使用するようにしてください。

特定のビューを別の回転にする最も簡単な方法は、モーダルで表示することです。これが避けられない場合は、最初のビューまたはナグ コントローラーに戻って回転を設定します。

NSLog(@"%s", __FUNCTION__);ローテーション メソッドにいくつかのステートメントを追加して、どのステートメントが呼び出されているかを確認します。

上記のコードでは、最初のメソッドのみが古い iOS5 (非推奨) メソッドです。残りの 3 つは新しい iOS 6 メソッドです。

上記のコード例を使用すると、UINavigationController をサブクラス化する必要があります。これを行うには、別の名前の UINavigationController サブクラスとして新しいクラスを作成します。MyNavigationController を開き、回転メソッドを追加します。次に、使用する代わりに上記のコードで UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:homeController];

以下を使用します。

MyNavigationController *navController = [[MyNavigationController alloc] initWithRootViewController:homeController];

また、ここで選択した向きが許可されていることを確認してください。 ここに画像の説明を入力

于 2012-12-23T17:33:59.937 に答える