appearanceWhenContainedIn不按预期工作

时间:2013-01-14 23:23:58

标签: iphone ios objective-c uiappearance

我正在使用iOS的UIAppearanceProxy来自定义我的应用程序外观。

在大多数应用中,我希望navBar有一个背景图片。在应用程序的一个特定部分中,我希望导航栏具有不同的背景图像。

以下是我在application:didFinishLaunchingWithOptions:

中所做的事情
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar_bg1"]
                                   forBarMetrics:UIBarMetricsDefault];

[[UINavigationBar appearanceWhenContainedIn:[DiscoverViewController class], nil] setBackgroundImage:[UIImage imageNamed:@"navbar_bg2"]                                                   forBarMetrics:UIBarMetricsDefault];

我想将所有外观代码保存在一个位置,而不是覆盖特定视图控制器中的navBar。

同样有用的是,我的应用程序是用TabBarController构建的,其中每个选项卡控制一个NavigationController,它拥有一个子类ViewController,如上面的DiscoverViewController。

我做错了什么?

1 个答案:

答案 0 :(得分:7)

正如您刚才所说,导航栏未包含在您的层次结构中的DiscoverViewController;相反,两者都包含在导航控制器中。保持外观代码集中的一种方法是创建UINavigationController的空子类,并在相关位置(无论是笔尖或故事板还是仅以编程方式)实例化而不是UINavigationController。然后,为了设置子元素的样式,将它们的外观代理“包含在”DiscoveryNavigationController中或者你有什么。我过去使用过这种方法效果很好。