如何为特定视图的导航栏设置自定义背景图像

Posted

技术标签:

【中文标题】如何为特定视图的导航栏设置自定义背景图像【英文标题】:How to Set the custom background image for navigation bar of a specific view 【发布时间】:2013-05-19 05:21:31 【问题描述】:

我在应用程序 delegate.m 中使用此代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:  (NSDictionary *)launchOptions 
   // Rename "specialNavBar.png" to the file name of your specific navigation bar    background image.
    UIImage *special = [UIImage imageNamed:@"movBar.png"];

     // Rename "SpecialViewController" to the class name that you want to have a different navigation bar for.
    [[UINavigationBar appearanceWhenContainedIn:[MovableViewController class], nil] setBackgroundImage:special
                                                                                     forBarMetrics:UIBarMetricsDefault];

// Override point for customization after application launch.
return YES;

APP 崩溃并给我这个错误信息:

由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[<MovableViewController 0xa17eb90> setValue:forUndefinedKey:]:此类不符合键值编码的键navBar。' * 首先抛出调用栈: (0x1d11012 0x11f3e7e 0x1d99fb1 0xc9fe41 0xc215f8 0xc210e7 0xc4bb58 0x355019 0x1207663 0x1d0c45a 0x353b1c 0x2187e7 0x218dc8 0x218ff8 0x219232 0x1683d5 0x16876f 0x168905 0x171917 0x13596c 0x13694b 0x147cb5 0x148beb 0x13a698 0x1f4adf9 0x1f4aad0 0x1c86bf5 0x1c86962 0x1cb7bb6 0x1cb6f44 0x1cb6e1b 0x13617a 0x137ffc 0x276d 0x2695) libc++abi.dylib:终止调用抛出异常

【问题讨论】:

您的可移动视图控制器是否有 xib,如果有,它是否连接到一个名为 navBar 的旧插座,该插座可能已在您的班级中重命名或删除? (或者在你的故事板中......我忘了,我尽量不使用 Apple 的测试版软件) 【参考方案1】:

您可以像这样在导航栏中添加自定义图像。

_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIImage *special = [UIImage imageNamed:@"movBar.png"];
[_window.rootViewController.navigationController.navigationBar setBackgroundImage:special forBarMetrics:UIBarMetricsDefault];

【讨论】:

【参考方案2】:

在您想要更改其背景的视图控制器中的UINavigationBar 上调用-setBackgroundImage:。然后,在-viewWillDisappear: 方法中,将其设置回原始图像。

【讨论】:

以上是关于如何为特定视图的导航栏设置自定义背景图像的主要内容,如果未能解决你的问题,请参考以下文章

弹出视图时不恢复自定义导航栏背景

如何为整个应用自定义 UINavigationBar?

如何为 UITableView 部分标题动态设置背景颜色?

如何删除自定义导航栏图像?

如何为视图设置背景图像?

如何为 UISplitviewController 导航栏图像使用单个图像?