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