自定义以编程方式创建的导航栏的背景图像

Posted

技术标签:

【中文标题】自定义以编程方式创建的导航栏的背景图像【英文标题】:Customizing the background image for a navigation bar created programmatically 【发布时间】:2011-09-08 19:02:17 【问题描述】:

我一直在自定义我的应用的导航栏。 我以编程方式添加了导航控制器。 事实上,在我的应用委托的 application:didFinishLanchingWithOptions 方法中, 我使用以下代码添加并隐藏了一个导航栏:

self.window.rootViewController  = self.viewController;
// ListingNav previously declared as instance variable
self.ListingNav = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.ListingNav.navigationBarHidden = YES;
[self.window addSubView:ListingNav.view];
[self.window makeKeyAndVisible];
return YES;

现在,我想设置一个图像作为导航栏背景,为“返回”按钮设置另一个背景图像,并在同一个导航栏的右侧添加另一个按钮,也有自己的背景图像。关于如何进行的任何想法?

感谢您的帮助,

斯蒂芬

【问题讨论】:

【参考方案1】:

你可以试试:

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed: @"ImageNameWithOutExtension"] forBarMetrics: UIBarMetricsDefault];

【讨论】:

【参考方案2】:

子类 UINavigationBar 并重写它的 drawRect 方法来绘制图像。

如果您的 UINavigationController 是通过 InterfaceBuilder 创建的,您可以轻松更改关联的 UINavigationBar 的类。如果您通过代码创建 UINavigationController,则可以使用 object_setClass。 (this one for example)

*** 上已有很多关于完全相同主题的问题,不要犹豫,在网站上搜索“NavigationController 背景”。

【讨论】:

但是你可以在代码中看到我没有使用 IB...这就是问题 所以按照建议使用object_setClass 请注意,我不能谈论它,因为它仍在 NDA 下,但如果您有开发者帐户,我鼓励您查看 ios5 中添加到 UINavigationBar 的新属性,您也会发现它很有用东西;)【参考方案3】:

您可以自定义导航栏而不隐藏它。只需使用 addSubview 方法添加这些组件。

背景图片可以添加如下:

UIImageView *imageview = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"bg.png"]];
[self.navigationController.navigationBar addSubview:imageview];

[self.navigationController.navigationBar sendSubviewToBack:imageview];
[imageview release];

由于您需要自定义按钮,因此您可以使用相同的方式添加 UIButton。创建一个具有自己背景的新 UIButton 并添加它。

【讨论】:

【参考方案4】:

使用此代码.....

     [self.navigationController.navigationBar setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@""]]];

【讨论】:

以上是关于自定义以编程方式创建的导航栏的背景图像的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式创建自定义导航栏?

如何以编程方式获取 Android 导航栏的高度和宽度?

iPad导航栏自定义高度

如何在 Swift 中更改 TabBar 的颜色?图像作为导航栏中的背景?

导航栏错误

以编程方式获取导航栏的高度