5

ランドスケープをサポートするビューコントローラー (ランドスケープモードの場合) から、ランドスケープを明示的にサポートしない (そしてすべきでない) ビューコントローラーに移行しようとしています。私は次のようにこれをやっています:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}

理想的には、スタックにプッシュしている新しいviewControllerを、最初は横向きではなく縦向きで開始する必要があります。奇妙なことに、このメソッドが実装されていても、Landscape で開始されます。

私の唯一の推測は、Apple はユーザーが横向きから縦向きに移行することを望んでいないということです (横向きから縦向きの以前のコントローラーに戻ることは許可されていますが)。

洞察や助けをいただければ幸いです。

4

3 に答える 3

10

ポートレートを強制する方法を見つけました。少しハックですが、ここにあります。-(void)viewDidLoad の -(void)viewDidLoad で、ポートレートを強制したい viewController で次の操作を行います。

UIViewController *viewController = [[UIViewController alloc] init];
[self presentModalViewController:viewController animated:NO];
[self dismissModalViewControllerAnimated:NO];
[viewController release];

これは基本的に、コントローラーを提示することにより、ポートレートを強制します (デフォルトではポートレートのみをサポートします)。

于 2011-02-18T22:08:53.963 に答える
4

新しいView Controllerをモーダルに提示する必要があります。ビュー コントローラーがナビゲーション コントローラー内に存在する場合、ナビゲーション スタック内のすべてのビュー コントローラーの向きは、スタック内のルート ビュー コントローラーによって暗示されます。nav スタック内のルート ビュー コントローラーが shouldAutoRotateToInterfaceOrientation から返すものは何でも、その下のすべてのビュー コントローラーに使用されます。

于 2011-01-28T17:32:34.853 に答える
1

上記の Sahil による回答は、iOS 6.0 以降では非推奨です。ただし、以下は同じトリックを行うようです。

UIViewController *viewController = [[UIViewController alloc] init];
[self presentViewController:viewController animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
[viewController release];
于 2013-03-06T10:24:26.237 に答える