自定义导航栏按钮的iOS 7
问题描述:
看不同的建筑使用了iOS 7 SDK我的应用更改导航栏和按钮的外观:自定义导航栏按钮的iOS 7
顶部图像显示了它是什么时候上运行一样使用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)];
}
的默认行为是与应用着色颜色“,始终原画你的非透明图像像素“模式将防止发生。
答
该按钮位于相同的位置,但导航栏向上移动。可能试图阻止这种“想要全屏”的尝试。
在项目定义页面中查看常规 - >部署信息 - >状态栏样式 或者在代码中,如果您覆盖它。
此外,有一个在iOS的特性setSelectedImage新的,检查过
答
因为状态栏现在是导航栏的一部分,你的自定义导航栏背景图片应该可以飞越状态栏和导航栏伸展,或者对于两者都应该足够高。
这适用于iOS 7,但我必须在iOS 6下运行时测试此方法的可用性(imageWithRenderingMode)。 –