2

UINavigationBar のデザイナーによって作成されたカスタム イメージがあります。iPhone 用に 640x128 および 640x88 サイズのスライスを取得しました。私の質問:

  1. ステータス バーを非表示にする場合、640x88 サイズを使用しますか、それとも 640x128 を使用する必要がありますか?

  2. iPhone 6/6+ と iPad では、ナビゲーション バーのサイズと縦横比が異なるため、これらの画像を再利用する方法がわかりません。

参考までに、画像は上から下(Y軸)への色のグラデーションを使用して作成されています。伸縮可能な UIImage を使用しても、デバイスごとに異なる高さのナビゲーション バーの問題を解決するにはどうすればよいですか? iOS 7以降をターゲットにする必要があります。

4

3 に答える 3

1

これを試すことができますヘッダーで、次のようなさまざまなデバイスのマクロを定義できます

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
#define IS_IPHONE_6 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)667) < DBL_EPSILON)
#define IS_IPHONE_6_PLUS (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)736) < DBL_EPSILON)

そして、これの if および else 条件..

UIImageView *imageview;   
if (IS_IPHONE_5){
    imageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 45)];
    imageview.image=[UIImage imageNamed:@"yourimage" ];
       [self.navigationController.navigationBar addSubview:imageview];}
else if(IS_IPHONE_6){
    imageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 375, 55)];
    imageview.image=[UIImage imageNamed:@"select_albums6"];
}else if (IS_IPHONE_6_PLUS){
    imageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 414, 55)];
    imageview.image=[UIImage imageNamed:@"select_albums6"];
} else
{
      // 3.5 inch
    imageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 45)];
    imageview.image=[UIImage imageNamed:@"select_album"];
}

次に、ナビゲーションサブビューを追加します

        [self.navigationController.navigationBar addSubview:imageview];

:このコードは ViewDidLoad および ViewWillAppear メソッドで記述されているため、ナビゲーションバーはカスタムサイズで設定されています...これが役立つことを願っています

于 2014-10-17T12:53:36.933 に答える
0

NavigationBar の背景にカスタム イメージを追加します。最初に考えるべきことは、カスタム イメージのサイズです。

1) 320x44 => background.png
2) 640x88 => background@2x.png
3) 1334x183 => background@3x.png

次のコードを使用して、背景画像を追加し、ナビゲーション バーの背景画像のタイリングを回避します。

[self.navigationController.navigationBar setBackgroundImage:[[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault];
于 2017-02-27T06:55:52.230 に答える