UINavigationBar 自定义标题视图

Posted

技术标签:

【中文标题】UINavigationBar 自定义标题视图【英文标题】:UINavigationBar Custom Title View 【发布时间】:2012-09-13 15:15:47 【问题描述】:

我正在使用 ios 5 UINavigationBarUIAppearance 协议来自定义我的所有导航栏。

这是我的自定义功能:

- (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];

我有两个问题:

首先是颜色不是clearColor,而是黑色。有什么建议吗?

标题视图根本没有出现。 Ray Wenderlich 展示了如何通过在 applicationDidFinishLaunching 中添加:[[rootViewController navigationItem] setTitleView: [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"miniLogo.png"]]] 来做到这一点。但是这样做的问题是标题视图只会添加到根视图控制器中。我正在使用UINavigationController,当我厌倦了用navigationController(我在AppDelegate 中的导航控制器的名称)替换rootViewController 时,我根本看不到标题视图。我该如何解决?为什么它在customizeApperance() 中不起作用?使用外观的全部意义不就是只创建一次标题视图(就像我在函数上方所做的那样)并在所有导航栏中将其设为全局吗?我怎样才能做到这一点?

【问题讨论】:

这篇文章可能对您有所帮助。 [custom-uinavigationbar-background][1] [1]: ***.com/questions/704558/… 【参考方案1】:

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

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

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

【讨论】:

我实际上想要clearColor,以便它背后的背景透明显示。能做到吗? @Darksky:试试self.navigationController.navigationBar.translucent = YES; @MartinR 用于使条形半透明,但是,按钮仍然是纯黑色。见***.com/questions/3081203/…中的图片 @Gujamin:谢谢你的信息。我的问题是我不知道 Darksky 到底想要达到什么目的。而且我不知道他是否还需要这个答案,已经有一段时间没有反馈了。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于UINavigationBar 自定义标题视图的主要内容,如果未能解决你的问题,请参考以下文章

由于奇怪的 UINavigationBar 视图层次结构,自定义 UINavigationBar 不起作用

如何在 iOS 11 中引入的 UINavigationBar 的大标题视图上添加自定义视图

防止自定义 UINavigationBar 元素在视图之间更改

UI NavBar高度的自定义(不同视图需要不同高度的nav bar)

与自定义视图控制器一起使用时,UINavigationBar 的 UIAppearance 不起作用...?

增加 UINavigationBar 的高度并添加在推送时持续存在的自定义视图