0

私のアプリは、iPad 専用アプリとして誕生しました。現在、iPhone に適した小さいバージョンに変換しています。私は同じコードベースを使用していますが、コントローラーの多くは実際にはあまり変更する必要はありません。小さな画面に合わせてビューを作り直すだけです。iPad と iPhone のバージョンでは一部の機能が異なり、App Store での価格も大きく異なるため、これはユニバーサル アプリではありません。

デバイス ファミリを iPhone に設定して別のターゲットを追加しました。元のターゲットでは、これが iPad に設定されています。

ファイルview~iphone.xib名がview.xib.

問題は、iPhoneビルドを iPad で実行するときです。ご想像のとおり、iPhone アプリはその小さな iPhone ウィンドウで実行されます (2 倍に拡大できます)。しかし、ロードされたペン先はiPadのペン先であり、明らかに iPhone サイズのディスプレイに適合しないか、サイズ変更されません。iOS が iPhone バージョンを自動的に読み込まない理由がわかりません。をテストUI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPadすると false が返されるので、iPhone モードで実行されていることがわかります。

顧客が iPad で iPhone アプリを実行するのを止めることはできないので、それを正しく動作させたいと考えています。私はいくつかのことを試しましたが、正しくないようです:

  • コードを に変更する[[MyViewController alloc] initWithNibName:@"MyView~iphone" bundle:nil];と正しい nib がロードされますが、それは nib 名が指定されているすべての場所に条件付きコードを配置する必要があることを意味します - これは大きなアプリなのでたくさんあり、エラーが発生しやすい可能性があります将来、私または別の開発者が新しいコードでこれを行うのを忘れたときに。
  • すべての~iphonenib の名前を iPad バージョンと同じファイル名になるように変更し (つまりview.xib)、それらを別のディレクトリに移動し (オリジナルの名前と衝突しないように)、それらをプロジェクトに再度追加しますが、含まれているだけです。 iPhone ターゲット (iPad ターゲットではなく) で、元の iPad nib を iPhone ターゲット (ただし iPad ターゲットにはまだ含まれている) からチェックを外すと、実行時に正しい nib がロードされます (「間違った」nib は存在しないため)。命名に関係なく、各ビルドのバンドルでより長くなります)。ファイル名view~iphone.xibCould not load NIB in bundle. ファイル名が同一であるため、この方法は非常に不快であり、一見しただけでは何が起こっているのかわかりません。
  • 元の xib の名前をview~ipad.xib(iPhone の nib を にview~iphone.xib) 変更しても、iPad で iPhone ビルドを実行すると iPad の nib が読み込まれます。

これらのいずれかよりも良い方法があるはずですか? デバイスが iPhone アプリを実行していることを明確に認識しているのに、間違った (iPad) nib が読み込まれるのはなぜですか?

4

1 に答える 1

0

iPhone ターゲットから削除する必要がありMyView~iPadます (nib ファイルをクリックし、Target Membershipセクションの下の右側のパネルでファイルのチェックを外します。

また、iPad ターゲットの iPhone nibs のチェックを外します。appこれによりペン先が除外されるため、パッケージにコピーされません。また、リソースに対して同じアプローチを使用して、アプリのサイズを小さくすることができます。

于 2012-09-18T06:35:52.700 に答える