2

以前、ユニバーサル アプリケーション用の XIB ファイルを作成するときに従った一般的な方法は次のとおりです。

iPhone と iPad の両方で Xib ファイルを作成します。それらに XibFile.xib および XibFile~ipad.xib という名前を付けます。iPhone 4/4s と iPad3 では、必要に応じて網膜画像を使用しました。これで、私のすべての UI デザインがカバーされました。また、クライアントはレターボックス モードの iPhone5 画面を必要としていました。Default-568h@2x.png は使用しませんでした。だから人生は私の最後に順調に進んでいました。しかし、Apple が 5 月 1 日以降レターボックス モードのサポートを停止することを決定したとき (この記事を読む)、iPhone5 の画面についても Xib レベルの変更が必要になりました。そのため、今のところ、Xib ファイルで自動サイズ変更を使用し、すべての画面で垂直方向の拡張を使用して、ほとんどの問題を解決しました。iphone5/4/4s と iPad をサポートする XIB ファイル作成のベスト プラクティスを教えてください。

1.) iphone5、4 インチ画面用に設計し、iPhone 4/4s 用の自動サイズ変更を使用します。これにより、私が使用する画像の明瞭さが損なわれることはありません。

2.) iphone 用に 2 つの異なる Xib ファイルを作成します。1 つは 4 インチ iPhone5 用で、もう 1 つは通常の iPhone4/4s 画面用です。

ベストプラクティスであるアドバイスをお願いします。また、他に方法があれば教えてください。

4

4 に答える 4

1

デバイスごとにレイアウトが根本的に異なる場合にのみ、複数の XIB を作成する必要があります。

適切な自動サイズ変更動作で iPhone 4 と 5 の両方に同じ XIB を再利用できる場合は、そうしてください。

于 2013-05-15T06:51:22.580 に答える
0

自動サイズ変更の使用は優れたソリューションです。これにより、インターフェイスの定義とコードがシンプルかつ最小限に保たれます。おそらく、4 と 5 の XIB ファイルの間にはほとんど違いはありません。

この方法を使用して問題が発生する可能性が高いのは、XIBでのみコンテンツ サイズが指定されているスクロール ビューが XIB で定義されている場合です。この場合、コンテンツのサイズを計算するためのコードを少し追加する必要があります。自動サイズ変更では対応できないため、コンテンツのサイズを変更する必要があります。

于 2013-05-15T06:28:15.437 に答える
0

最善の方法は、iPhoneまたはiPadのさまざまなモデルを確認し、それに応じて必要なことを行うことです. 以下のコードを使用して、iPhone のバージョンを確認できます。

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
    if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) {
        CGSize result = [[UIScreen mainScreen] bounds].size;
        CGFloat scale = [UIScreen mainScreen].scale;
        result = CGSizeMake(result.width * scale, result.height * scale);

        if(result.height == 960) {
            NSLog(@"iPhone 4 Resolution");
            resolution_number = 1;
        }
        if(result.height == 1136) {
            NSLog(@"iPhone 5 Resolution");
        }
    }
    else{
        NSLog(@"Standard Resolution");
    }
}
于 2013-05-15T06:21:56.913 に答える
0

別の xib を使用して、簡単に管理できるこのコーディングを配置します。

        //Device Compatibility
        #define g_IS_IPHONE             ( [[[UIDevice currentDevice] model] isEqualToString:@"iPhone"] )
        #define g_IS_IPOD               ( [[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"] )
        #define g_IS_IPAD               ( [[[UIDevice currentDevice] model] isEqualToString:@"iPad"] )
        #define g_IS_IPHONE_5_SCREEN    [[UIScreen mainScreen] bounds].size.height >= 568.0f && [[UIScreen mainScreen] bounds].size.height < 1024.0f
        #define g_IS_IPHONE_4_SCREEN    [[UIScreen mainScreen] bounds].size.height >= 480.0f && [[UIScreen mainScreen] bounds].size.height < 568.0f 



     if(g_IS_IPHONE_5_SCREEN)
     {
              DashboardViewController* deshObj=[[DashboardViewController alloc] initWithNibName:@"DashboardViewController" bundle:nil];
     }
     else if(g_IS_IPHONE_4_SCREEN)
     {
            DashboardViewController* deshObj=[[DashboardViewController alloc] initWithNibName:@"DashboardViewController4" bundle:nil];
     }
     else if(g_IS_IPAD){
             DashboardViewController* deshObj=[[DashboardViewController alloc] initWithNibName:@"DashboardViewControllerIpad" bundle:nil];
     }
     else{
           DashboardViewController* deshObj=[[DashboardViewController alloc] initWithNibName:@"DashboardViewController" bundle:nil];
      }

あなたは簡単にあなたの状態を置くことができます

于 2013-05-15T06:48:41.140 に答える