【问题标题】:Set tintColor for UINavigationBar only for specific child view controller仅为特定子视图控制器设置 UINavigationBar 的 tintColor
【发布时间】:2013-12-10 11:53:21
【问题描述】:

我有一个基本的主从应用程序。根据在主列表中选择的项目,我只想在详细信息视图中设置导航栏的tintColor

我在细节控制器的viewWillAppear: 中设置了色调颜色:self.navigationController.navigationBar.tintColor = detailTintColor;

但是,这也会将主控制器导航栏的颜色更改为黄色(应保持红色),在过渡动画期间以闪烁的形式可见。我假设是因为只有一个导航栏实例。

这里有一个截图来说明问题:

  • “i”图标位于主视图控制器的导航栏中,应为红色,而不是黄色

【问题讨论】:

  • 刚刚注意到您的屏幕截图来自 iPhone 模拟器,但您说您有一个主从应用程序。但是iPhone不支持UISplitViewController,你是怎么实现的?
  • @redent84 主/详细信息是指一个主表和另一个“详细信息”表视图。
  • 我就是这么想的。您必须清楚地指定它,因为 iPhone 和 iPad 的实现完全不同。
  • 我就是这样做的:stackoverflow.com/a/23301889/1388671

标签: ios uinavigationcontroller uinavigationbar tintcolor


【解决方案1】:

在 iOS 8 中,我们通过以下方式设置色调颜色:-

self.navigationController.navigationBar.barTintColor = [UIColor redColor];

【讨论】:

    【解决方案2】:

    当视图消失时为什么不重置为原始颜色?

    -(void)viewWillDisappear:(BOOL)animated {
        self.navigationController.navigationBar.tintColor = yourSavedColor;
        [super viewWillDisappear:animated];
    }
    

    【讨论】:

    • 感谢您的建议,但我试过了。当切换到细节控制器时,问题已经出现在过渡动画期间。主控制器导航栏的“i”图标变为黄色,但应保持红色(否则会闪烁)。
    【解决方案3】:

    您只需在 Storyboard 中的 Details UINavigationController 中更改 UINavigationBar 的色调颜色:

    工作样本:

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

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

    【讨论】:

    • 有没有办法在代码中做到这一点而不使用self.navigationController.navigationBar.tintColor = color?我事先不知道颜色。
    • 是的,您可以使用UIAppearance 方法。
    • 我有一个 iPhone 应用程序(没有拆分视图)。这只是两个表视图。
    • 此解决方案仅适用于 iPad。 iPhone环境请参考其他答案。
    • 感谢您提供“appearanceWhenContainedIn”!我现在经常使用它:)
    猜你喜欢
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多