可能重复:
How to add background image on iphone Navigation bar?iPhone - 导航栏自定义背景
我正在寻找一种方式,有一个自定义导航栏,需要有一个自定义导航栏的背景来实现这一。我四处寻找如何做到这一点,但找不到解决方案。如果有人有解决方案,非常感谢帮助。
可能重复:
How to add background image on iphone Navigation bar?iPhone - 导航栏自定义背景
我正在寻找一种方式,有一个自定义导航栏,需要有一个自定义导航栏的背景来实现这一。我四处寻找如何做到这一点,但找不到解决方案。如果有人有解决方案,非常感谢帮助。
您可以将一个子视图(一个UIImageView)添加到navaigationBar,它只是一个UIView子类。
UINavigationBar nb = [[UINavigationBar alloc]init];
[nb addSubview: foo];
[nb release];
这里有一个论坛的帖子,描述了如何包装这一成一个类别:http://discussions.apple.com/thread.jspa?threadID=1649012&tstart=0
(补充安德鲁约翰逊的反应)
链接的Apple.com职位包括3级或4个不同的解决方案,其中大部分只有“一半”工作。我觉得最优雅/有效的他们是这个:
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"NavigationBar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
无论其...这不是好的做法ObjC到OD,作为一个类别(应该是覆盖),它有一些问题,其拥有。
所以,一个更通用和强大的解决方案是在这里:
http://samsoff.es/posts/customize-uikit-with-method-swizzling
感谢链接对我来说亚当:)你是对的,重写类别的方法是一个非常糟糕的做法。 –
有人低估了这个没有解释?不知道为什么。虽然我会补充一点:这整个问题(以及大部分答案)都只是iOS 2/3/4 - iOS 5有一个全新的系统。答案仍然适用于做iOS4的人。 – Adam
由于iOS5的,你可以轻松地设置自定义背景,用该方法了setBackgroundImage:forBarMetrics: 但你必须检查用户的手机拥有合适的操作系统。
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
{
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"texture.png"]
forBarMetrics:UIBarMetricsDefault];
}
这是一个更好的解决方案,因为它在文档中。
直到没有运行iOS5的用户运行您的应用程序 – JoeCortopassi
是的,但有一个检查。你可以在else子句中做其他的事情。 – Martin
将其复制到viewDidLoad中。它将检查iOS 5并使用首选方法,否则会将子视图添加到NavBar for iOS版本< 5.0。只要您的自定义背景图像没有透明胶片,这将工作。
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
NSLog(@"%f",version);
UIImage *backgroundImage = [UIImage imageNamed:@"myBackgroundImage.png"];
if (version >= 5.0) {
[self.navigationController.navigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
}
else
{
[self.navigationController.navigationBar insertSubview:[[[UIImageView alloc] initWithImage:backgroundImage] autorelease] atIndex:1];
}
有更多的解决方案替代解决方案在这里: http://stackoverflow.com/questions/1692487/how-to-add-background-image-on-iphone-navigation-bar –