UINavigationBar自定义标题视图

时间:2012-09-13 15:15:48

标签: iphone objective-c uinavigationcontroller uinavigationbar uiappearance

我正在使用iOS 5 UINavigationBar的{​​{1}}协议来自定义我的所有导航栏。

这是我的自定义功能:

UIAppearance

我有两个问题:

  • 首先是颜色不是- (void)customizeApperance { [[UINavigationBar appearance] setTintColor:[UIColor clearColor]]; [[UINavigationBar appearance] setAlpha:0.7]; UIImageView *titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title.png"]]; [[UINavigationBar appearance] setTitleView:titleView]; } 而是黑色。有什么建议吗?

  • 标题视图根本没有出现。 Ray Wenderlich通过在clearColor中添加[[rootViewController navigationItem] setTitleView: [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"miniLogo.png"]]]来说明如何执行此操作。但问题是标题视图只会添加到根视图控制器中。我正在使用applicationDidFinishLaunching,当我厌倦用UINavigationController替换rootViewController(AppDelegate中导航控制器的名称)时,我根本看不到标题视图。我该如何解决这个问题?为什么它不能在navigationController中运行?使用外观的关键不仅仅是创建一次标题视图(就像我在函数上面所做的那样)并且在所有导航栏中都是全局的吗?我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:6)

[UIColor clearColor]是完全透明的颜色(alpha = 0)。将其设置为浅色可使(黑色)背景闪耀。也许你想要[UIColor whiteColor]

titleViewUINavigationItem的属性,每个视图控制器都有自己的navigationItem。因此,您无法全局设置标题视图。但您可以使用外观协议设置UINavigationBar的背景图像,这可能有助于:

[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];  

答案 1 :(得分:1)

你试过titleView.opaque = NO;吗?如果将其设置为YES(即默认情况下,因为您正在使用initWithImage :),绘图系统将假设您的视图填充其整个边界,并且不会打算绘制与其框架重叠的任何内容。

答案 2 :(得分:0)

setTitleView:是NavigationItem上的一个方法。但是你在导航栏上调用它