希望您也能对此有所帮助...我想通过添加自定义背景图片来自定义导航栏。我发现了一个完美但有点复杂的方法,叫做:NavigationSwizzle。在以前的项目中,我没有任何严重的问题,但现在我被困住了......
从我的 AppDelegate 我调用这个静态方法:
@implementation SCAppUtils
+ (void)customizeNavigationController:(UINavigationController *)navController
{
//Customizing navigation BAR
UINavigationBar *navBar = [navController navigationBar];
[navBar setTintColor:kSCNavBarColor];
//Customizing TOOLBAR
[navController setToolbarHidden:NO animated:YES];
UIToolbar *toolBar = [navController toolbar];
UIImageView *imageView = (UIImageView *)[navBar viewWithTag:kSCNavBarImageTag];
UIImageView *imageView2 = (UIImageView *)[toolBar viewWithTag:kSCNavBarImageTag];
if (imageView == nil)
{
Utilities *utilities = [[Utilities alloc]init];
UIImage *img = [UIImage imageNamed:@"nav-bar-background.png"];
UIImage *img2 = [UIImage imageNamed:@"toolbar-background.png"];
imageView = [[UIImageView alloc] initWithImage:img];
imageView2 = [[UIImageView alloc] initWithImage:img2];
[imageView setTag:kSCNavBarImageTag];
[imageView2 setTag:kSCNavBarImageTag];
[navBar insertSubview:imageView atIndex:0];
[toolBar insertSubview:imageView2 atIndex:0];
[imageView release];
[imageView2 release];
[utilities release];
}
}
在通过将第二个视图控制器推到堆栈上调用第二个视图控制器之后,在 rootNavigationController 中,我的右键、self.title、activityIndicator 不显示。如果我在[navBar insertSubview:imageView atIndex:0]行中评论或设置atIndex:-1 ; 然后按钮显示,但我的自定义背景消失了,我得到了常规的 iPhone 导航选项卡。
在rootNavigationController的didSelectRowAtIndex中,我有:
//ADD BACK BUTTON TO VIEW
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
//Home Button color
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:166.0 / 255 green:179.0 / 255 blue:191.0 / 255 alpha:1.0];
//PUSH TO NEXT VIEW
[self.navigationController pushViewController:detailViewController animated:YES];
先感谢您...
如果您需要更多代码或解释,请随时问我...
最好的问候,卢卡
编辑:
好的,我可以让这个问题更简单。我的导航栏中有一个自定义背景图像。这张图显然覆盖了我的
self.navigationItem.title = @"TITLE";
如果我将 alpha 设置为:背景中 imageView 的 0.3,我可以看到我的标题:
imageView = [[UIImageView alloc] initWithImage:image];
[imageView setAlpha:0.3];
[imageView setTag:kSCNavBarImageTag];
[navBar insertSubview:imageView atIndex:0];
所以问题是如何将我的 navigationItem.title 发送到前面?它是 UIView 类的后代吗?
编辑 2: 真正奇怪的是,在 rootController 中标题是可见的(在背景图像上方),但是在推动另一个 viewController 标题之后,背景 imageView ?!