自定义以编程方式创建的导航栏的背景图像
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:@""]]];
【讨论】:
以上是关于自定义以编程方式创建的导航栏的背景图像的主要内容,如果未能解决你的问题,请参考以下文章