将图像添加到UINavigationBar

时间:2011-12-13 12:23:19

标签: ios uinavigationcontroller uinavigationbar

我需要支持iOS4和iOS5。我的代码在iOS4上运行良好,但在iOS5上不起作用。如何解决问题。

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"E_44.png"]];
imageView.frame = CGRectMake(136, 0, 52, 44);
[self.navigationController.navigationBar insertSubview:imageView atIndex:0];
[imageView release];

2 个答案:

答案 0 :(得分:8)

为UINavigationBar设置自定义背景以支持iOS5和iOS4!


如您所知,在iOS 5发布之前,我们在drawRect中使用AppDelegate覆盖来自定义UINavigationBar。 但是要知道,iOS 5为我们提供了一些新的样式方法(旧的方法不起作用)。

如何使用程式化的UINavigationBar构建适用于iOS 4和iOS 5的应用程序?

你必须同时做到这两点!

AppDelegate中使用此代码:

@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIImage *img = [UIImage imageNamed:@"navbar.png"];
[img drawInRect:rect];
}
@end

和iOS5的viewDidLoad方法(在您的视图实现中):

if ([self.navigationController.navigationBar respondsToSelector:@selector( setBackgroundImage:forBarMetrics:)]){
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];
}

如果你看到,我们在这里询问导航栏是否会响应ToSelector以避免iOS4崩溃!

答案 1 :(得分:3)

这不会添加背景,但这会让您将图像添加到导航栏

 // Create your image<br>
 UIImage *image = [UIImage imageNamed: @"yourimage.png"];<br>
 UIImageView *imageview = [[UIImageView alloc] initWithImage: image];

 // set the text view to the image view<br>
 self.navigationItem.titleView = imageView;

希望这有帮助。