8

向きを変えるためにNavControllerStackでほぼすべてのプッシュまたはポップを必要とするiPhoneアプリケーションを入手するのに苦労しています。

基本的に、最初のビューはポートレート、2番目のランドスケープは3番目のポートレートです(はい、これは理想的ではないことはわかっていますが、それがデザインであり、実装する必要があります)。

私はここでさまざまなアドバイスを受けてきました....
デバイスを自動回転させずにiPhoneで回転を検出するにはどうすればよいですか?
新しいビューをUINavigationViewControllerにプッシュするときに縦向きを強制
するiPhoneの向きを設定するための文書化された方法はありますか?
しかし、完全な成功はありません。

3.1.2に対してリンクするように設定すると、上記のリンクされた記事を読んだときに、ポートレートビューが

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeRight) );
}
次に、そのビューは横向きに回転して表示されます。何が起こるかというと、それは「壊れた」縦向きの形で現れ、デバイスが回転すると正しく回転します。

コントローラをポートレートビュー(適切なshouldAutoRotate ...があります)に戻すと、デバイスがポートレート方向に戻るまで、壊れたランドスケープビューのままになります。

また、shouldautorotateメッセージをすべて削除し、代わりにビューを変換して強制的に回転させようとしました。[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;この種の動作は、ステータスバー(実際にはアプリケーションで非表示になっています)を移動することで、キーボードが必要に応じて正しい方向で表示されることを理解しました。

このアプローチの問題は、ステータスバーがない場合、ステータスバーの変換が奇妙で醜いことです。変更するたびに、ページ上に影が表示されます。

それで。私は何が欠けていますか。

1)3.1.2(またはそれ以前)では、AutorotateToInterfaceOrientationは、コントローラーを押すだけで目的の方向を提供する必要があると考えるのは間違っていますか?

2)キーボードを正しい向きで表示する別の方法はありますか。

3)文書化されていないAPI呼び出しは進むべき道ですか(いいえ!)

4

1 に答える 1

4

[UIViewController shouldAutorotateToInterfaceOrientation:]向きの変更をトリガーするために使用しないでください。自動回転が許可されているかどうかをシステムに通知するためだけにあります。ただし、許可される方向を指定するように更新する必要があります。

特定のビューが表示されているときに方向を変更する場合は、特定の方向を強制する各ビューコントローラーのオーバーライドメソッド[UIApplication setStatusBarOrientation:animated:]内を呼び出す必要があります。[UIViewController viewWillAppear:]これにより、ビューがスタックにプッシュされているとき、およびビューがスタックからポップされているときに変更が発生します。super必ずオーバーライドメソッドを呼び出してください。

これは、ステータスバーの表示方法を変更するのに適した場所でもあります。

于 2010-04-22T15:00:40.073 に答える