为特定的子视图控制器设置UINavigationBar的tintColor

5
我有一个基本的主从应用程序。根据在主列表中选择的项目,我想仅设置详细视图中导航栏的tintColor
我像这样设置色调:self.navigationController.navigationBar.tintColor = detailTintColor; 在详细控制器的viewWillAppear:中。
然而,这也会更改主控制器导航栏的颜色为黄色(应保持为红色),这在过渡动画期间可见为闪烁。 我认为这是因为只有一个导航栏实例。
下面是一个屏幕截图以说明问题:
  • "i"图标在主视图控制器的导航栏中,应为红色,而不是黄色

enter image description here


刚刚注意到你的截图是来自 iPhone 模拟器,但你说你有一个主从应用程序。但是在 iPhone 上不支持 UISplitViewController,你是如何实现它的? - redent84
@redent84,所谓的主/细节是指一个主表和另一个“详细信息”表视图。 - Mark
那正是我想的。你必须明确地指定它,因为 iPhone 和 iPad 的实现方式非常不同。 - redent84
这是我做的方式:https://dev59.com/yHfZa4cB1Zd3GeqPV8c2#23301889 - Noel
3个回答

2
在iOS 8中,我们是通过以下方式设置色调颜色的:-
self.navigationController.navigationBar.barTintColor = [UIColor redColor];

2
为什么视图消失时不重置为原始颜色?
-(void)viewWillDisappear:(BOOL)animated {
    self.navigationController.navigationBar.tintColor = yourSavedColor;
    [super viewWillDisappear:animated];
}

谢谢您的建议,但我已经尝试过了。问题已经出现在切换到详细控制器时的过渡动画期间。主控制器导航栏中的“i”图标会变成黄色,但应该保持为红色(否则会闪烁)。 - Mark

2
您只需要在Storyboard中的详细页面 UINavigationController 的 tint 颜色即可更改导航栏的颜色:

enter image description here

示例:

enter image description here

您可以使用 UIAppearance API 通过子类化 UINavigationController 并将详细控制器设置为自定义类来获得相同的结果。然后,使用 UIAppearance API ,设置 UINavigationBar 的 tint 颜色即可:

[[UINavigationBar appearanceWhenContainedIn:[DetailNavigationController class], nil] setTintColor:[UIColor redColor]];

有没有一种在不使用 self.navigationController.navigationBar.tintColor = color 的情况下用代码来实现这个功能的方法?我事先不知道颜色是什么。 - Mark
是的,您可以使用 UIAppearance 方法。 - redent84
我有一个iPhone应用程序(没有分屏视图)。它只是两个表视图。 - Mark
此解决方案仅适用于iPad。请参考其他答案以获取iPhone环境的解决方案。 - redent84
谢谢您提供 "appearanceWhenContainedIn"!我现在经常使用它 :) - Fengson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接