8

うまくいけば小さな問題のための長いタイトル。

カスタム背景画像を含むUINavigationBarがあります。私のアプリは、縦向きだけでなく横向きもサポートします。ランドスケープは、網膜3インチおよび非網膜スクリーンのシミュレーターでうまく機能します。ただし、網膜4インチ画面では、背景画像は横向きモードでその2倍のサイズで表示されます。

カスタムナビゲーションコントローラーのinit-methodからの関連するコードスニペットは次のとおりです。

[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-bg.png"] forBarMetrics:UIBarMetricsDefault];        
if (IS_IPHONE_5)
{
    [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-bg-landscape-iphone5.png"] forBarMetrics:UIBarMetricsLandscapePhone];
}
else
{
    [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-bg-landscape.png"] forBarMetrics:UIBarMetricsLandscapePhone];
}

IS_IPHONE_5は、次のように定義されたマクロです。

#define WIDTH_IPHONE_5 568
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds].size.height == WIDTH_IPHONE_5)

ここでは、物事をより明確に説明する可能性のある2つの画面フラグメントを示します。アプリをポートレートモードで開くと、すべて問題ありません。

肖像画

ランドスケープモードに変更すると、すべてが爆発します。

風景

背景画像の横向きバージョンの画像サイズ(ピクセル単位、幅x高さ)は次のとおりです。

  • navbar-bg-landscape.png:480x44
  • navbar-bg-landscape@2x.png:960x88
  • navbar-bg-landscape-iphone5.png:1136x88

それとも、シミュレーターだけの問題でしょうか?(私は現在実際のiPhone 5を持っていません)

4

1 に答える 1

7

私はあなたnavbar-bg-landscape-iphone5.pngが実際に呼ばれるべきであり、あなたがあなたのコードのnavbar-bg-landscape-iphone5@2x.pngようにそれを参照し続けるべきであると信じています。iPhone 5にはRetinaディスプレイがあるため、iOSはそのバージョンnavbar-bg-landscape-iphone5.pngを探して使用します。@2x見つからない場合は、前述のバージョンを使用してから、2倍にスケールアップします。iOSによる2倍のスケールアップを回避するには、@2xバージョンを指定します。

于 2012-10-09T21:58:11.237 に答える