如何在每页的基础上更改导航栏的背景图像?

时间:2010-08-14 15:08:48

标签: iphone ipad uinavigationbar ios

我一直在寻找一种方法来更改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的背景图像?

提前感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

您需要在当前页面或当前适当的图像上设置一些状态,可能在您的每个viewWillAppear:方法中。然后修改上面的drawRect:函数以引用该状态。

要重新绘制条形,请在更新状态时调用[myNavigationBar setNeedsDisplay]。这将导致drawRect被调用。

答案 1 :(得分:1)

我真的建议您阅读Sebastian Celis的教程,这对我很有帮助 - http://sebastiancelis.com/2009/12/21/adding-background-image-uinavigationbar/

答案 2 :(得分:0)

是不是可以在导航栏上使用图像视图(添加)?

答案 3 :(得分:0)

我相信这是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];
}

答案 4 :(得分:0)

您可以在应用程序的任何位置使用此代码(通过调用方法来调用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
}