iPhoneでのuiinterfaceorientationの変更を強制します
-
01-10-2019 - |
質問
私は、方向を変更するためにNAVコントローラースタックのほぼすべてのプッシュまたはポップを必要とする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;
必要に応じて、キーボードが正しい方向で表示されます。
このアプローチの問題は、ステータスバーがない場合、ステータスバーの変換が奇妙でugいものであることです。変化するたびに影がページ上に迫っています。
それで。何が足りないのか。
1)3.1.2(またはおそらく以前)には、コントローラーをプッシュするだけで希望の方向を提供する必要があると考えているのは間違っていますか?
2)キーボードを正しい方向に表示する別の方法があります。
3)文書化されていないAPIが行く方法を呼び出します(いいえ!)
解決
使用してはいけません [UIViewController shouldAutorotateToInterfaceOrientation:]
オリエンテーションの変更をトリガーします。自動回転が許可されているかどうかをシステムに知らせるのはそこにあります。許可されている方向を指定するには、それでも更新する必要があります。
特定のビューが表示されているときにオリエンテーションを変更したい場合は、電話する必要があります [UIApplication setStatusBarOrientation:animated:]
あなたの内側 [UIViewController viewWillAppear:]
特定の方向を強制する各ビューコントローラーのオーバーライドメソッド。それは、ビューがスタックに押し込まれているときとそれが飛び出しているときに変更を引き起こします。必ず電話してください super
オーバーライド方法で。
これは、ステータスバーの表示方法を変更するのに適した場所でもあります。