iOS 4 中的 UINavigationBar 色调颜色闪烁
Posted
技术标签:
【中文标题】iOS 4 中的 UINavigationBar 色调颜色闪烁【英文标题】:UINavigationBar tint color flashing in iOS 4 【发布时间】:2012-02-28 20:34:22 【问题描述】:我正在开发的应用程序有一个自定义导航栏,但支持 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 设备上为 UINavigationBar 使用 setBackgroundImage,它按预期工作,因此 Flash 仅在 iOS 4 中。
任何人都知道为什么会发生这种情况和/或如何解决它?
【问题讨论】:
在应用程序生命周期的什么时候调用引用代码的类,它在 viewDidLoad 中吗? 【参考方案1】:栏按钮项目的颜色错误?您可以在 viewDidLoad: 中手动设置它们的 tint color 为 tint color
navigationBar.rightBarButtonItem.tintColor = [UIColor ...]
如果您使用的是 nib 文件。否则你可以在 loadView: 中做同样的事情。无论哪种方式,此代码都将作为初始绘制循环的一部分执行,因此您将获得正确的颜色而不会闪烁。
为了将来参考,在一个类别中覆盖一个方法在技术上是不正确的。 (最新版本的 Xcode 4.3 会给你一个警告)。您应该正确地继承 UINavigationBar 或执行“方法调配”。但这很困难,所以现在不要担心:)
【讨论】:
这最终成为了解决方案 - 只需手动设置加载的第一个视图控制器的导航栏色调颜色。非常感谢。【参考方案2】:如果您使用 viewDidLoad 中引用的代码调用该类,请尝试将其移至 awakeFromNib
【讨论】:
以上是关于iOS 4 中的 UINavigationBar 色调颜色闪烁的主要内容,如果未能解决你的问题,请参考以下文章
iOS 8 中 UITableViewController 中的透明 UINavigationBar