iPhone - NavigationBar 自定义背景 [重复]
Posted
技术标签:
【中文标题】iPhone - NavigationBar 自定义背景 [重复]【英文标题】:iPhone - NavigationBar Custom Background [duplicate] 【发布时间】:2011-01-16 15:00:46 【问题描述】:可能重复:How to add background image on iphone Navigation bar?
我正在寻找一种具有自定义导航栏的方法,并且需要具有自定义导航栏背景才能实现此目的。我一直在寻找如何做到这一点,但找不到解决方案。如果有人有解决方案,非常感谢您的帮助。
【问题讨论】:
这里有更多替代解决方案:***.com/questions/1692487/… 【参考方案1】:从 ios5 开始,您可以轻松设置自定义背景,使用方法 setBackgroundImage:forBarMetrics: 但是你必须检查用户的手机是否有正确的操作系统。
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"texture.png"]
forBarMetrics:UIBarMetricsDefault];
这是一个更好的解决方案,因为它在文档中。
【讨论】:
直到没有运行 iOS5 的用户运行您的应用程序 是的,但是有一个检查。你可以在 else 子句中做点别的。【参考方案2】:(补充安德鲁·约翰逊的回应)
链接的 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,它有自己的一些问题。
所以,这里有一个更通用、更强大的解决方案:
http://samsoff.es/posts/customize-uikit-with-method-swizzling
【讨论】:
感谢 Adam 链接到我 :) 你说得对,用类别覆盖方法是一种非常糟糕的做法。 有人在没有解释的情况下否决了这个?不知道为什么。虽然我要补充:整个问题(以及大多数答案)仅适用于 iOS 2/3/4 - iOS 5 有一个全新的系统来执行此操作。答案仍然适用于正在做 iOS4 的人。【参考方案3】:你可以在navaigationBar中添加一个子视图(一个UIImageView),它只是一个UIView的子类。
UINavigationBar nb = [[UINavigationBar alloc]init];
[nb addSubview: foo];
[nb release];
这是一个论坛帖子,描述了如何将其包装到一个类别中:http://discussions.apple.com/thread.jspa?threadID=1649012&tstart=0
【讨论】:
【参考方案4】:将其复制到 viewDidLoad 中。它将检查 iOS 5 并使用首选方法,否则它将为 iOS 版本
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];
【讨论】:
以上是关于iPhone - NavigationBar 自定义背景 [重复]的主要内容,如果未能解决你的问题,请参考以下文章