编辑2: 我现在已经解决了这个问题。我正在为我的 UINavigationBar 设置自定义背景图像,如下所示:
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"NavigationBarBackground" ofType:@"png"]]];
[navBar addSubview:imgView];
[navBar sendSubviewToBack:imgView];
[imgView release];
这对于 UINavigationController 的视图控制器堆栈上的第一个视图控制器来说很好,但是任何子视图都会使此代码重新运行并将自定义背景放在前面。
修复: 只需删除导航控制器上自定义背景的所有代码,然后以下列方式扩展 UINavigationBar 类:
创建一个名为 UINavigationBar+CustomImage 的新 .h / .m 文件。将 .h 代码设置为:
@interface UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect;
@end
和 .m 到:
#import "UINavigationBar+CustomImage.h"
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"NavigationBarBackground.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
瞧!现在一切正常。
--- 结束编辑 2 ---
我有一个 UINavigationController,它像这样向下钻取:
HOMEPAGE > DETAIL PAGE > MAP VIEW
DETAIL PAGE 向 viewDidLoad 中的 rightBarButtonItem 添加了一个自定义 UIToolbar(带有三个按钮),如下所示:
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 1.0, 157.0, 44.1)];
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"NavigationBarBackground" ofType:@"png"]]];
[tools addSubview:imgView];
[tools sendSubviewToBack:imgView];
[tools setTintColor:[UIColor colorWithRed:127/255.0 green:184/255.0 blue:72/255.0 alpha:1.0]];
[imgView release];
NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3];
UIBarButtonItem* bi = [[UIBarButtonItem alloc] initWithTitle:@"Filter" style:UIBarButtonItemStyleBordered target:self action:NULL];
[buttons addObject:bi];
[bi release];
bi = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Map.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(showMap:)];
[buttons addObject:bi];
[bi release];
bi = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Favourite.png"] style:UIBarButtonItemStyleBordered target:self action:NULL];
[buttons addObject:bi];
[bi release];
[tools setItems:buttons animated:NO];
[buttons release];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools];
这在查看详细视图页面时完美显示,当我转到地图视图时,自定义 UIToolbar 消失(如预期的那样),但是,当返回详细视图时,自定义 UIToolbar 不再可见。但是,它就在那里,因为我仍然可以点击“地图”按钮所在的区域,它会将我推回到地图视图。
你知道当返回到 DETAIL 视图时如何让这个 UIToolbar 再次显示吗?
我尝试在 viewWillAppear 中重建自定义 UIToolbar,效果与上面完全相同。
编辑- 如果我将构建自定义 UIToolbar 的代码放在 viewDidAppear 方法中,这将起作用。不过我不喜欢这个解决方案,当视图向后滑动时,自定义的 rightBarButtonItem 就会出现。这与在显示页面之前未初始化导航控制器有关吗?