自定义导航栏按钮的iOS 7

问题描述:

看不同的建筑使用了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外观转换的“最佳实践”是什么?

导航栏背景:

您需要使用可伸缩的图像,以填补导航栏。因为你的形象似乎是一个相当简单的梯度,这样的事情应该让你关闭:

[[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)。 –

该按钮位于相同的位置,但导航栏向上移动。可能试图阻止这种“想要全屏”的尝试。

在项目定义页面中查看常规 - >部署信息 - >状态栏样式 或者在代码中,如果您覆盖它。

此外,有一个在iOS的特性setSelectedImage新的,检查过

因为状态栏现在是导航栏的一部分,你的自定义导航栏背景图片应该可以飞越状态栏和导航栏伸展,或者对于两者都应该足够高。