导航项目从UINavigationBar中消失

时间:2008-12-18 12:11:39

标签: cocoa-touch

我通过创建图片视图并执行[navigationController.navigationBar addSubview:imageView]将自定义背景图像添加到导航栏。

背景很好。但是一旦我这样做,我的其他导航项目就会以奇怪的方式开始表现。有时会出现navigationItem.title,后退按钮会消失。这完全是随机的。知道是什么导致了这个吗?

感谢。

3 个答案:

答案 0 :(得分:2)

在视图设置过程中,您是否添加了子视图?您可能在添加其他导航项后执行此操作,因此它将覆盖它们。尝试在-loadView方法中添加它,或等到-viewWillAppear:,然后使用-sendSubviewToBack:添加它之后。

答案 1 :(得分:2)

作为一个额外的想法,我设法通过覆盖drawRect:来实现完全自定义的导航栏,让它显示背景图像。从那里,可以轻松设置导航控制器的leftBarButtonItem属性的rightBarButtonItemtitleViewnavigationItem属性,以实现自定义按钮和标题。这适用于内置的导航控制器/导航栏/导航项逻辑,因此不存在隐藏或遮挡事物(如条形按钮)的风险。

UINavigationBar类别中:

- ( void )drawRect:( CGRect )rect
{
    [ [ UIImage imageNamed:@"background-image.png" ] drawInRect:CGRectMake( 0, 0, 
      self.frame.size.width, self.frame.size.height ) ];
}

在致电pushViewController:animated:之前,请执行以下操作:

UIButton * leftButton = [ UIButton buttonWithType:UIButtonTypeCustom ];
leftButton.frame = CGRectMake( 0.0, 0.0, 65.0, 32.0 );
[ leftButton setImage:[ UIImage imageNamed:@"left.png" ] forState:UIControlStateNormal ];
[ leftButton addTarget:self action:@selector( leftAction ) forControlEvents:UIControlEventTouchUpInside ];

UIButton * rightButton = [ UIButton buttonWithType:UIButtonTypeCustom ];
rightButton.frame = CGRectMake( 0.0, 0.0, 65.0, 32.0 );
[ rightButton setImage:[ UIImage imageNamed:@"right.png" ] forState:UIControlStateNormal ];
[ rightButton addTarget:self action:@selector( rightAction ) forControlEvents:UIControlEventTouchUpInside ];

UIImageView * titleView = [ [ UIImageView alloc ] initWithImage:[ UIImage imageNamed:@"title.png" ] ];

UIBarButtonItem * leftBarButtonItem = [ [ UIBarButtonItem alloc ] initWithCustomView :leftButton ];
UIBarButtonItem * rightBarButtonItem = [ [ UIBarButtonItem alloc ] initWithCustomView:rightButton ];

nextController.navigationItem.leftBarButtonItem = leftButtonItem;
nextController.navigationItem.rightBarButtonItem = rightButtonItem;
nextController.navigationItem.titleView = titleView;

也许有点忙,但你可以把所有这些代码抽象成一个方法(或其中的一系列)。如果您想要完全覆盖导航栏中出现的任何样式,这种方法可以很好地工作。

希望这有帮助!

答案 2 :(得分:1)

非常感谢。我将imageView设置为索引0,这解决了问题。