2

我有一個由設計人員爲UINavigationBar製作的自定義圖像。我爲iPhone獲得640x128 & 640x88尺寸切片。我的問題:UINavigationBar iPhone 6/6的自定義圖像+

  1. 如果我隱藏狀態欄,我使用640x88大小或我仍然需要使用640x128,

  2. 對於iPhone6分之6+也iPad的,我不知道知道如何重新使用這些圖像,因爲導航欄的長寬比&的大小不同。

僅供參考,圖像是使用顏色從上到下(在Y軸)的漸變色。即使我使用可伸縮的UIImage,我如何解決每個設備上不同高度的導航欄問題?我需要針對上面的iOS 7 &。

回答

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方法,所以導航欄設置爲您的自定義尺寸... 我希望這會幫助

+0

您也應該檢查其iPhone或iPad的成語,比如: '#定義IS_IPHONE(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone)' – Laszlo 2014-10-17 12:56:23

+0

@Tuss你是對的 – 2014-10-17 12:58:20

6

爲了解決這個問題,我只是爲iPhone 4/5/5創建三個不同的圖像,iPhone 6和iPhone 6 Plus。 的圖像分辨率爲320x64,375x64 @ 2X,414x64 @×(高度爲64,因爲我需要的背景圖像導航欄+狀態欄)

然後我就應用初始化應用正確的圖像:

NSString * navBarImageName; 

if (IS_IPHONE_6P) { 
    navBarImageName = @"navBarBackground_iPhone6Plus"; 
} else if (IS_IPHONE_6) { 
    navBarImageName = @"navBarBackground_iPhone6"; 
} else { 
    navBarImageName = @"navBarBackground"; 
} 

UIImage * navBarBackground = [UIImage imageNamed:navBarImageName]; 
[[UINavigationBar appearance] setBackgroundImage:navBarBackground forBarMetrics:UIBarMetricsDefault]; 
0

爲NavigationBar背景添加自定義圖像時,首先應該考慮的是自定義圖像的尺寸。

1)320x44 => background.png
2)640x88 => [email protected]
3)1334x183 => [email protected]

使用下面的代碼添加背景圖片,並避免在導航欄的背景圖像中出現任何平鋪。

[self.navigationController.navigationBar setBackgroundImage:[[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault];