如何以每页为基础更改我的 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 的背景图像?的主要内容,如果未能解决你的问题,请参考以下文章

在excel中如何用VBA取得每页的行数?

如何使用动态母版页为每个用户制作自定义菜单?

如何更改数据表中每页值的结果

如何使用 KNP Paginator Bundle 更改每页的动态限制记录?

UIPageViewController:每页更改页面指示器/页面控件的颜色

如何使用 Material UI 表格分页在每页显示正确的行