7

これがばかげた質問である場合はお詫びしますが、グーグルで検索して SO を検索しましたが、この正確な質問をする人は見つかりませんでした。

私はしばらくの間 iOS 開発を行ってきましたが、Interface Builder はまったくの初心者です。私が知りたいのはこれです.1つの.xibファイルを作成し、ユニバーサルアプリケーションでiPhoneとiPadの両方に使用する方法はありますか?

それらを別々に作成しなければならないのはばかげているように思えます。コードで(画面サイズを微調整して)1回実行できるのに、Interface Builderで2回以上レイアウトする作業が2倍になるのはなぜですか?

ここで何かが欠けている/誤解している場合はお知らせください。私が言ったように、私は完全なInterface Builderの初心者です:)

編集: 私は過去に非インターフェイス ビルダー ゲームを App Store に提出しましたが、iPhone と iPad のバージョンは同じでした。縦横比の違いによるわずかな配置の変更を除けば、まったく同じに見えるようにするつもりです。

4

4 に答える 4

10

自動サイズ変更に基づいて、結果のビューがどのように表示されるかがわかっている場合は、実際に使用できるのは1つだけ.xibです。ビューが、必要に応じて自動サイズ変更する共有コンポーネントの一種である場合に便利です。ただし、iPadとiPhoneでビューを異なって表示する必要がある場合は、2つを使用して.xibください。次に、必要に応じて適切なものをロードすることができます。たとえば、このコントローラーの-initのようにインスタンス初期化子にロードできます。

- (id)init
{
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
    {
         self = [super initWithNibName:@"YourNibForPad" bundle:nil];
    }
    else
    {
         self = [super initWithNibName:@"YourNibForPhone" bundle:nil];
    }
    if (self) { /* initialize other ivars */ }
    return self;
}
于 2012-04-05T15:18:35.227 に答える
3

XIBが個別のファイルである主な理由は、AppleがiPhone /iPodtouchおよびiPad用に設計されたUIをそれぞれに合わせて調整する必要があると考えているためです。これは彼らのiOSアプリプログラミングガイドに反映されており、次のように書かれています。

ビューの場合、主な変更は、より大きな画面をサポートするようにビューレイアウトを再設計することです。既存のビューを単純にスケーリングするだけでも機能する場合がありますが、多くの場合、最良の結果が得られません。新しいインターフェイスは、使用可能なスペースを利用し、必要に応じて新しいインターフェイス要素を利用する必要があります。そうすることで、大画面のiPhoneアプリだけでなく、ユーザーにとってより自然に感じられるインターフェイスが得られる可能性が高くなります。

事実上1つのUIであるために2つのXIBを維持するには時間がかかる場合がありますが、1つのXIBを使用し、そのXIBが読み込まれたときにプログラムでUI要素を移動するために、ほとんどのUI要素を接続するよりも簡単だと思います。結局のところ、少なくとも2つのXIBを使用すると、各UIがどのように見えるかを確認し、視覚的な変更を簡単に行うことができます。

余談ですが、iOS 5のストーリーボード(ここでそれらについて読んでください)を忘れないでください。これにより、ビュー/ビューコントローラー階層の管理がはるかに簡単になります。

于 2012-04-05T14:43:50.987 に答える
1

それらに名前を付けてみてください

MyCell.xibMyCell ~ ipad.xib

それから:

[self.tableView registerNib: @"MyCell" forCellReuseIdentifier: @"MyUniqueIdentifier"];
于 2014-04-22T09:51:22.950 に答える
0

IBを使用している場合は、iPhoneとiPad用に2つの別々のxibファイルを作成する必要があります。アプリをAppleiPadUIガイドラインに準拠させるには、別のiPadxibが必要です。

于 2012-04-05T14:44:37.937 に答える