1

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

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

这就是我正在做的事情application:didFinishLaunchingWithOptions:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar_bg1"]
                                   forBarMetrics:UIBarMetricsDefault];

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

我想将所有外观代码保存在一个地方,而不是覆盖特定视图控制器中的导航栏。

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

我究竟做错了什么?

4

1 回答 1

7

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

于 2013-01-14T23:33:11.620 回答