【问题标题】:How can I change the background image for my NavigationBar on a per page basis?如何以每页为基础更改我的 NavigationBar 的背景图像?
【发布时间】: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 的背景图像?

提前感谢您的帮助!

【问题讨论】:

    标签: iphone ipad uinavigationbar ios


    【解决方案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
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-19
            • 2020-08-23
            • 2014-03-19
            • 1970-01-01
            • 1970-01-01
            • 2021-03-16
            相关资源
            最近更新 更多