因为我更新到xcode 4.2和iOS 5以下代码没有效果:
@implementation UINavigationBar (CustomNavBarBG)
-(void)drawRect:(CGRect)rect{
UIImage *image = [UIImage imageNamed:@"navbar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
self.tintColor = [UIColor colorWithRed:124/255.0 green:177/255.0 blue:55/255.0 alpha:1.0];
}
@end
@implementation MyAppDelegate
//....
这应该将背景图像和颜色应用于导航栏。但是自从更新后我得到了默认的蓝色。我在我的项目中使用了three20框架。
知道为什么这不起作用?如何在一个位置而不是在每个视图控制器中为所有导航栏设置背景图像?
答案 0 :(得分:28)
尝试设置:
[[UINavigationBar appearance] setBackgroundImage:myImage forBarMetrics:UIBarMetricsDefault];
在- (void) applicationDidFinishLaunching:(UIApplication *)application
编辑: 似乎也很有帮助:
[[UINavigationBar appearance] setTintColor:myColor];
答案 1 :(得分:2)
ios5中有一些原生方法可以更改背景图像。我创建了一个适用于ios 4& 4的类别。 5.(在这里没有代码)但是不应该很难创建一个。
[navBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
答案 2 :(得分:1)
我有同样的问题[[UINavigationBar appearance] setBackgroundImage:myImage forBarMetrics:UIBarMetricsDefault];
在iOS 4上不起作用,但在iOS 5上工作正常。所以我尝试了替代解决方案。
image = [UIImage imageNamed:@"yourImageName.png"];
if([[UINavigationBar class] respondsToSelector:@selector(appearance)]) //iOS >=5.0
{
[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}
else
{
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.navigationController.navigationBar addSubview:imageView];
}
答案 3 :(得分:1)
如果您已经在UINavigationBar上设置了图像,并且想要在应用程序运行时更改它,请执行此操作。
UIImage *NavigationPortraitBackground = [UIImage imageNamed:@"red_bg.png"];
[[UINavigationBar appearance] setBackgroundImage:NavigationPortraitBackground forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"red_bg.png"] forBarMetrics:UIBarMetricsDefault];
答案 4 :(得分:0)
我有另一个解决方案,因为上面的解决方案 隐藏导航栏上的所有按钮
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];