1

私はiPhoneとiPad用の別々のxibsを備えたユニバーサルアプリを持っています

iPadバージョンの場合、iPadxibの1つを横向きモードにします。シミュレートされたメトリックで横向きに設定しましたが(アプリは概要画面で縦向きに設定されています)、実行時に横向きのビューは引き続き縦向きで表示されます。私はここで、xibが横向きにあることをアプリに伝える命名規則を読んだと確信しています。view1_one.xib~ipad-landscape

私は画面の回転方法を使用してみましたが、iOS 6の画面の回転は、効果がない多くのソリューションを試したので、非常に苛立たしいものです。以前iOS6で画面の回転を行ったことがありますが、ストーリーボードを使用して、選択したビューにナビゲーションコントローラーをサブクラス化しました。他の誰かからIPを選択したため、このコードでこれを行う方法がわかりません。

要約すると、縦向きで表示するのではなく、InterfaceBuilderで作成した横向きのxibを画面に反映させるにはどうすればよいですか?

私はここで解決策を探し、これを投稿する前にこれに何時間も費やしたことを指摘します

4

1 に答える 1

3

リソース(xibを含む)には、ロードされるデバイスタイプを指定する命名規則があります。ただし、これらは特定の方向には存在しません。-landscape余分なことは何もしません(より具体的には、おそらくiPhoneにもリソースがロードされますが、これはあなたが望むものではありません)。

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/Introduction/Introduction.html#//apple_ref/doc/uid/10000051i-CH1-SW2

向きの変更の処理については、iOS5以下のメソッドとそれらを処理するためのiOS6メソッドの両方を実装していることを確認してください。

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

// iOS6
- (BOOL)shouldAutorotate {
    return YES;
}

// iOS6
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

// Added after comment
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscapeLeft;
}

これは、viewControllerがランドスケープにのみロードされるようにする公式の方法です。

編集:

preferredInterfaceOrientationForPresentationメソッドも追加しました。個人的にはこのメソッドは好きではありませんが、次の向きが変わるまで、viewControllerをその向きで表示するように強制します。良くありませんが、オリエンテーションメソッドが呼び出されるかどうかを確認するのに役立ちます。

また、これらの各メソッドにブレークポイントを設定してみてください。まったく呼び出されない場合は、サブクラス化に問題がある可能性があります。ストーリーボードのviewControllerがスーパークラスではなくサブクラスに設定されていることを確認してください。

Edit2:

InterfaceBuilderでこれを確認してください:

InterfaceBuilderのViewControllerが適切なサブクラスに設定されていることを確認してください

于 2012-12-10T13:43:29.637 に答える