我通过创建图片视图并执行[navigationController.navigationBar addSubview:imageView]
将自定义背景图像添加到导航栏。
背景很好。但是一旦我这样做,我的其他导航项目就会以奇怪的方式开始表现。有时会出现navigationItem.title
,后退按钮会消失。这完全是随机的。知道是什么导致了这个吗?
感谢。
答案 0 :(得分:2)
在视图设置过程中,您是否添加了子视图?您可能在添加其他导航项后执行此操作,因此它将覆盖它们。尝试在-loadView方法中添加它,或等到-viewWillAppear:,然后使用-sendSubviewToBack:添加它之后。
答案 1 :(得分:2)
作为一个额外的想法,我设法通过覆盖drawRect:
来实现完全自定义的导航栏,让它显示背景图像。从那里,可以轻松设置导航控制器的leftBarButtonItem
属性的rightBarButtonItem
,titleView
和navigationItem
属性,以实现自定义按钮和标题。这适用于内置的导航控制器/导航栏/导航项逻辑,因此不存在隐藏或遮挡事物(如条形按钮)的风险。
在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,这解决了问题。