在我的应用程序中的应用程序委托中,我调用以下方法:
- (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]
,将barStyle
设置为UIBarStyleBlack
,但它们不会工作。只有barbutton项目会受到影响。
提前谢谢。
P.S。我正在使用iOS 5
答案 0 :(得分:4)
首先,如果您不介意拉伸图像,则不需要使用resizableImageWithCapInsets:UIEdgeInsetsMake(0,0,0,0)方法。
UIImage *gradientPortrait = [UIImage imageNamed:@"gradient_portrait"];
UIImage *gradientLandscape = [UIImage imageNamed:@"gradient_landscape"];
UIImage *someOtherImage = [UIImage imageNamed:@"someOtherImageName"];
然后,为了实现你想要的目标:
使用以下内容将默认图像添加到所有导航栏
[[UINavigationBar appearance] setBackgroundImage:gradientPortrait forBarMetrics:UIBarMetricsDefault];
使用以下内容将特定图像添加到将显示在子类ViewControllers上方的导航栏
[[UINavigationBar appearanceWhenContainedIn:[YOURSUBCLASS class], nil] setBackgroundImage:someOtherImage forBarMetrics:UIBarMetricsDefault];
(您可以从应用代理中的某个位置调用这些方法)
顺便说一下,如果您只想更改色调颜色,可以使用tintColor属性而不是所有图像。
了解更多信息,请查看:UINavigationBar Class Reference
的外观部分答案 1 :(得分:0)
使用您的自定义类对UINavigationBar进行子类化,并在其上显示不同的外观。然后在特定的地方使用您的自定义类,在那里您可以看到不同的外观。