如何以每页为基础更改我的 NavigationBar 的背景图像?
Posted
技术标签:
【中文标题】如何以每页为基础更改我的 NavigationBar 的背景图像?【英文标题】:How can I change the background image for my NavigationBar on a per page basis? 【发布时间】:2010-08-14 15:08:47 【问题描述】:我一直在寻找一种方法来更改我的NavigationBar
的背景图像并在用户浏览应用程序时控制我的NavigationBar
的外观。
我了解更改背景图像的公认方法是:
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect
UIImage *image = [UIImage imageNamed: @"navbar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
@end
但是,这会改变整个应用中 NavigationBar
的外观。当用户从一个视图导航到下一个视图时,如何更改 NavBar
的背景图像?
提前感谢您的帮助!
【问题讨论】:
【参考方案1】:您可能需要在每个viewWillAppear:
方法中设置有关当前页面或当前要使用的适当图像的某些状态。然后修改上面的 drawRect:
函数以引用该状态。
要重新绘制条形图,请在更新状态时调用 [myNavigationBar setNeedsDisplay]
。这将导致调用drawRect
。
【讨论】:
谢谢,seamus,但看起来 drawRect 例程只在第一次绘制导航栏时被调用。当用户深入导航层次结构时,不会调用 drawRect 例程。每次我更改视图时,有没有办法强制调用 drawRect 例程? 我有一个带有不同控制器的标签栏。我正在尝试这个:for (UIViewController* vc in self.viewControllers) [vc.navigationController.navigationBar setNeedsDisplay];
但我仍然需要更改页面才能看到导航栏的变化。你知道为什么吗?【参考方案2】:
我真的推荐阅读 Sebastian Celis 的教程,它对我很有帮助 - http://sebastiancelis.com/2009/12/21/adding-background-image-uinavigationbar/
【讨论】:
【参考方案3】:难道不能在导航栏上使用图片视图(添加)吗?
【讨论】:
【参考方案4】:我相信这是 ios5 的第一个实际答案,主要问题是完成后“删除”背景图像。好吧,只需保留现有图像,完成后将其放回即可。
@implementation MyViewController
UIImage *_defaultImage;
- (void)viewWillAppear:(BOOL)animated
_defaultImage = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar.png"] forBarMetrics:UIBarMetricsDefault];
- (void)viewWillDisappear:(BOOL)animated
[self.navigationController.navigationBar setBackgroundImage:_defaultImage forBarMetrics:UIBarMetricsDefault];
【讨论】:
【参考方案5】:您可以在应用程序的任何位置使用此代码(调用 viewWillAppeare 中的方法:),方法是调用该方法来更改导航栏图像。如果你调用了didFinishLanch中的方法,则表示导航栏图片设置为整个应用。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[[UIDevice currentDevice] systemVersion];
if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9)
[self customizeAppearance];
- (void)customizeAppearance
UIImage *navbarimage = [[UIImage imageNamed:@"blckapplication_bar.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0,0,0)];
[[UINavigationBar appearance] setBackgroundImage:navbarimage forBarMetrics:UIBarMetricsDefault];
// Create resizable images
// Set the background image for *all* UINavigationBars
【讨论】:
以上是关于如何以每页为基础更改我的 NavigationBar 的背景图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 KNP Paginator Bundle 更改每页的动态限制记录?