UINavigationBar 自定义标题视图
Posted
技术标签:
【中文标题】UINavigationBar 自定义标题视图【英文标题】:UINavigationBar Custom Title View 【发布时间】:2012-09-13 15:15:47 【问题描述】:我正在使用 ios 5 UINavigationBar
的 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];
我有两个问题:
首先是颜色不是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]
?
titleView
是UINavigationItem
的一个属性,每个视图控制器都有自己的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)