【问题标题】:UINavigationBar tintColor does not always propagate to UIBarButtonItem objectsUINavigationBar tintColor 并不总是传播到 UIBarButtonItem 对象
【发布时间】:2009-08-08 21:06:32
【问题描述】:

您好!我已将我的 **UINavigationBar'**s barStyle 设置为 UIBarStyleBlack,并将 tintColor 设置为一种颜色(黑色除外,以便获得颜色/渐变)。这么多效果很好。

现在...假设我将一个新的视图控制器推送到导航控制器堆栈上。在这个特定的 VC 中,我希望导航栏变黑,但仅限于这个 VC。

因此,在新 VC 的 viewWillAppear: 方法中,我将导航栏的 tintColor 设置为 nil(或 [UIColor blackColor] - 要么一个作品)。在 viewWillDisappear: 中,我将 tintColor 改回原来的样子。同样,一切都很好。

直到我第二次(或更多)回到新的 VC。如果我这样做,导航栏会再次变黑,但 NOT 左侧栏按钮项!相反,它保留了父 VC 的原始颜色!

我查看了各种示例代码(甚至 Joe Hewitt 的 Three20 库,它似乎与我的照片控制器/浏览器所做的相同)。据我所知,我在做所有正确的事情,但我很困惑为什么除了我第一次进入我的新 VC 时,条形按钮项没有全部更改为黑色。

欢迎/赞赏线索!

【问题讨论】:

    标签: uiviewcontroller coding-style uinavigationbar uibarbuttonitem tint


    【解决方案1】:

    据我所知,这是一个已知的 3.0 错误。

    【讨论】:

    • 它似乎在 3.1 中已修复。
    【解决方案2】:

    尝试添加到 PARENT 视图控制器:

    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
    
        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Back", @"") style:UIBarButtonItemStylePlain target:nil action:nil];
        [self.navigationItem setBackBarButtonItem:backButton];
        [backButton release];
    }
    

    【讨论】:

    • 父级,你的意思是视图控制器的父级有问题吗?那不是把后退按钮设置得太高了吗? (更新:这在 3.1 中似乎已修复!)
    【解决方案3】:
        for (UIView *view in self.navigationController.navigationBar.subviews)
        {
            [view setNeedsDisplay];
        }
    

    希望对你有帮助。

    【讨论】:

    • 嗯。不是 100% 确定我对此感到满意。来自 UINavigationBar 文档:“与其他类型的视图不同,您不会直接将子视图添加到导航栏。”因此,如果我们不添加它们,我们实际上并不“了解”它们。我只是不确定我们在这里使用 setNeedsDisplay 是否——尽管它很方便——总是会按照我们期望的方式工作(而不是引用-知道-取消引用所有子视图是什么)。 “...您应该让导航控制器管理导航项堆栈,而不是尝试自己修改这些项。”同时,Apple 在 3.1 中已经修复了这个问题,所以这是一件好事!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 2011-08-15
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多