IOS 7では、次のように述べています。
// ViewController1:
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
-(BOOL)shouldAutorotate {
return YES;
}
// ViewController2, presented by modal segue from button in ViewController1
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
-(BOOL)shouldAutorotate {
return YES;
}
その結果、アプリはView Controller 1では横向きに、View Controller 2では縦向きに表示されました。
このコードは、Xcode 6のiOS 7シミュレーターを含め、iOS 7では正常に機能しますが、iOS 8では機能しなくなります。2つの問題があります。
View Controller 1のビューは横向きに表示されていますが、シミュレーターは自動的に回転していません(単にシミュレーターのバグである可能性があります)。その右側に大きな黒い領域があります)。
ビューコントローラー2のビューは、ビューコントローラー1のビューと同じ向きで表示されます(縦ではなく横)。
そのため、ビューコントローラービューは自動的に画面いっぱいにサイズ変更されず、表示されたビューコントローラーのサポートされている方向は適用されません。
では、これをどのように行うのでしょうか。それは特性コレクションと関係がありますか?好みのコンテンツサイズで?ステータスバーの向きを手動で設定すると?
パート1(ランドスケープへの起動)に対する答えはiOS 7から変更されていません。すべては、Info.plistファイルで可能な方向の順序に依存します。したがって、View Controller 1がこれを言うとしましょう:
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
次に、Info.plistがサポートするインターフェースの向きで横向きが最初に来る場合は、一貫して横向きに起動します。
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
<string>UIInterfaceOrientationPortrait</string>
</array>
IOS 8の注目すべき変更の1つは、横向きの場合、デフォルトでステータスバーが非表示になることです。ただし、必要に応じて、適切なオーバーライドを使用してこれを防ぐことができます。
-(BOOL)prefersStatusBarHidden {
return NO;
}
それは私の質問の2番目の部分、つまりビューコントローラーが表示されたときに回転を強制する方法には答えません。 この答え で説明したように、私の考えでは、これはiOS 8では不可能になるでしょう。ビューコントローラーとビューは「適応」することが期待されています。
EDIT:シード4では、ビューコントローラーのプレゼンテーション/非表示でアプリのローテーションを強制する機能が復活しました!
* .plistファイルに問題がある可能性があります
チェックして、あなたが望むのは、画面のデフォルト/最初の起動方向を次のようにリストすることです
サポートされるインターフェースの向き:
アイテム0ランドスケープ(右のホームボタン)
アイテム1ポートレート(下部のホームボタン)
Xcodeのグローバル検索でUIInterfaceの作業を最終的に確認する前に私が何日か追跡したこの「バグ」は、ゲームがサポートしていない方向をリストしていることに気付きました(ゲーム全体が100%ランドスケープライトです)
デバイスを横向きの向きに物理的に保持すると、GameCenterの起動が横向き左に回転する原因となった横向き左を解消しました。
問題が解決しました。