2013-09-26 82 views
3

看不同的建築使用了iOS 7 SDK我的應用更改導航欄和按鈕的外觀:自定義導航欄按鈕的iOS 7

navbar comparison

頂部圖像顯示了它是什麼時候上運行一樣使用iOS 6的一個器件,底部圖像示出了使用的iOS 7.

創建導航欄使用背景圖像的設備上運行相同的應用程序:

UIImage *navigationBarBackgroundImage = [[UIImage imageNamed:@"MyTopNavigationBackground"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 4, 0)]; 

UINavigationBar *bar = [UINavigationBar appearanceWhenContainedIn:[MyNavigationController class], nil]; 
[bar setBackgroundImage:navigationBarBackgroundImage forBarMetrics:UIBarMetricsDefault]; 
[bar setTintColor:[UIColor colorWithRed:0.17 green:0.62 blue:0.23 alpha:1.0]]; 

左邊欄按鈕創建:

- (UIBarButtonItem *)slideoverMenuBarButtonItem { 
    return [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"bar_button_icon_menu.png"] 
             style:UIBarButtonItemStylePlain 
             target:self 
             action:@selector(slideoverMenu)]; 
} 

我更關心的是正在發生的事情到按鈕的外觀。處理向新iOS 7外觀轉換的「最佳實踐」是什麼?

回答

5

導航欄背景:

您需要使用可伸縮的圖像,以填補導航欄。因爲你的形象似乎是一個相當簡單的梯度,這樣的事情應該讓你關閉:

[[UINavigationBar appearance] setBackgroundImage:[navigationBarBackgroundImage stretchableImageWithLeftCapWidth:0 topCapHeight:0]]; 

和你的背景圖像變成1W的X 64H PNG。

欄按鈕圖像:

使用[UIImage的imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

UIImage *buttonImage = [UIImage imageNamed:@"bar_button_icon_menu.png"]; 
return [[UIBarButtonItem alloc] initWithImage:[buttonImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
              style:UIBarButtonItemStylePlain 
              target:self 
              action:@selector(slideoverMenu)]; 

} 

的默認行爲是與應用着色顏色「,始終原畫你的非透明圖像像素「模式將防止發生。

+0

這適用於iOS 7,但我必須在iOS 6下運行時測試此方法的可用性(imageWithRenderingMode)。 –

0

該按鈕位於相同的位置,但導航欄向上移動。可能試圖阻止這種「想要全屏」的嘗試。

在項目定義頁面中查看常規 - >部署信息 - >狀態欄樣式 或者在代碼中,如果您覆蓋它。

此外,有一個在iOS的特性setSelectedImage新的,檢查過

1

因爲狀態欄現在是導航欄的一部分,你的自定義導航欄背景圖片應該可以飛越狀態欄和導航欄伸展,或者對於兩者都應該足夠高。