UINavigationBar色彩在iOS 4中闪烁

时间:2012-02-28 20:34:23

标签: objective-c ios uinavigationbar

我正在开发的应用程序有一个自定义nab栏但支持iOS 4.2-iOS 5,所以我需要在我的应用代表中以这种旧学校的方式设置UINavigationBar背景和色调。

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawRect:(CGRect)rect {
    self.tintColor = [UIColor colorWithRed:42.0/255.0 
                                     green:164.0/255.0 
                                      blue:182.0/255.0
                                     alpha:1.0];
    UIImage *img  = [UIImage imageNamed:@"navbar_bg.png"];
    [img drawInRect:CGRectMake(0.0, 0.0, 
                               self.frame.size.width, 
                               self.frame.size.height)];
}
@end

这在大多数情况下都有效,但我注意到应用程序首次启动时,UIBarButtonItems会在默认导航栏颜色自动更正并更改颜色以匹配导航栏之前闪烁一秒钟。有趣的是,导航栏本身可以从一开始就正确使用背景图像。

为了清楚起见,我在iOS 5设备上使用setBackgroundImage用于UINavigationBar,它按预期工作,因此flash仅在iOS 4中使用。

任何人都知道为什么会发生这种情况和/或如何修复它?

2 个答案:

答案 0 :(得分:0)

如果使用viewDidLoad中引用的代码调用该类,请尝试将其移至awakeFromNib

答案 1 :(得分:0)

条形按钮项目的颜色是错误的?您可以在viewDidLoad中手动设置其色调颜色:为色调颜色

 navigationBar.rightBarButtonItem.tintColor = [UIColor ...]

如果您使用的是nib文件。否则你可以在loadView中做同样的事情:。无论哪种方式,此代码都将作为初始绘制循环的一部分执行,因此您将拥有正确的颜色而不会闪烁。

同样为了将来参考,覆盖类别中的方法在技术上是不正确的。 (最新版本的Xcode,4.3,会给你一个警告)。你应该正确地继承UINavigationBar或做“方法调配”。但这很难,所以现在不用担心:)