重绘UINavigationBar以反映标题文本颜色更改

时间:2012-11-04 22:33:22

标签: ios5 uikit uinavigationbar

我正在尝试使用UINavigationBar标题文字颜色作为指示用户我的应用程序是否与外部附件有连接,例如红色表示断开连接,绿色表示已连接。

当连接状态发生变化时,通过使用setTitleTextAttributes方法然后调用[self.navigationBar setNeedsDisplay],更新UINavigationBar以获得正确的标题文本颜色没有问题。但是,更改不会立即反映出来。

我还使用[[UINavigationBar外观] setTitleTextAttributes:...],以便将来创建的任何新UINavigationBars都具有正确的值。如果我导航到新视图,导航栏标题是正确的颜色。

如何使用更新的标题颜色立即强制重绘UINavigationBar?

2 个答案:

答案 0 :(得分:2)

我想我刚遇到同样的问题。这是解决此问题的更简单方法。假设此UINavigationBar是标准UINavigationController的栏,您只需重新分配正在显示的文本。这是你的控制器的title属性。诀窍是,您需要更改其值才能使其正常工作。

self.navigationController.navigationBar.titleTextAttributes = @{...}

self.title = nil;
self.title = @"##Actual Title##";

答案 1 :(得分:0)

我使用以下代码在iPad模拟器上工作:

// update the title text color
NSDictionary *navBarTitleOptions = [NSDictionary 
        dictionaryWithObjectsAndKeys:newColor, UITextAttributeTextColor, nil];
[self.navigationBar setTitleTextAttributes:navBarTitleOptions];

// set and clear the title view in order to force the title to be 
// redrawn in the correct color.
[self.navigationBar.topItem setTitleView:[[UIView alloc] init]];
[self.navigationBar setNeedsDisplay];
[self.navigationBar.topItem setTitleView:nil];
[self.navigationBar setNeedsDisplay];

然而,这似乎不适用于iPhone / iPod模拟器。有什么想法吗?