3

在我的应用程序的应用程序委托中,我调用以下方法:

- (void)customizeAppearance 
{
    UIImage *gradientPortrait = [[UIImage imageNamed:@"gradient_portrait"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

    UIImage *gradientLandscape = [[UIImage imageNamed:@"gradient_landscape"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

    [[UINavigationBar appearance] setBackgroundImage:gradientPortrait 
        forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setBackgroundImage:gradientLandscape 
        forBarMetrics:UIBarMetricsLandscapePhone];
}

此代码允许自定义应用程序中的所有导航栏。因为我使用的图像是绿色的,所以每个条都变成绿色。

现在我的目标是为特定导航栏覆盖上述配置。特别是,在应用程序生命周期中,我使用UIModalPresentationFormSheet演示样式打开一个模态控制器。此控制器显示在UINavigationController. 由于我还需要显示附带的导航栏UINavigationController,我想知道如何在不更改我在应用程序委托中设置的全局配置的情况下自定义该栏。

我尝试将tintColor导航栏的属性(以模态方式呈现)设置为[UIColor blackColor]barStyleto UIBarStyleBlack,但它们不起作用。只有 barbutton 项目受到影响。

先感谢您。

PS我使用的是iOS 5

4

2 回答 2

4

首先,如果您不介意拉伸图像,则不需要使用 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) 方法。

UIImage *gradientPortrait = [UIImage imageNamed:@"gradient_portrait"];
UIImage *gradientLandscape = [UIImage imageNamed:@"gradient_landscape"];

UIImage *someOtherImage = [UIImage imageNamed:@"someOtherImageName"];

然后,实现你想要的:

  1. 确保您使用自定义导航栏子类化 ViewController
  2. 使用以下内容将默认图像添加到所有导航栏

    [[UINavigationBar appearance] setBackgroundImage:gradientPortrait forBarMetrics:UIBarMetricsDefault];
    
  3. 使用以下内容将特定图像添加到将出现在子类 ViewControllers 上方的导航栏

    [[UINavigationBar appearanceWhenContainedIn:[YOURSUBCLASS class], nil] setBackgroundImage:someOtherImage forBarMetrics:UIBarMetricsDefault];
    

(您可以从应用程序委托中的某处调用这些方法)

顺便说一句,如果您只想更改色调颜色,则可以使用 tintColor 属性而不是所有图像。

有关更多信息,请查看以下外观部分:UINavigationBar 类参考

于 2012-01-22T01:23:37.570 回答
0

使用您的自定义类子类 UINavigationBar 并在其上设置不同的外观。然后在您拥有不同外观的特定地方使用您的自定义类。

于 2013-06-14T13:08:54.907 回答