编译时间之间的 UIAppearance 代理缓存外观?

Posted

技术标签:

【中文标题】编译时间之间的 UIAppearance 代理缓存外观?【英文标题】:UIAppearance proxy caching appearance between compile times? 【发布时间】:2012-03-19 05:57:22 【问题描述】:

我正在使用新的 UIAppearance API,并且已经通过我的 AppDelegate 成功地为所有 UINavigationBar 和 UIToolbar 实例设置了色调颜色......

- (void)customizeAppearance

    UIColor *tint = [UIColor colorWithRed:212 green:63 blue:69 alpha:1.0];

    [[UINavigationBar appearance] setTintColor:tint];
    [[UIToolbar appearance] setTintColor:tint];

但是,如果我更改 RGB 值并重新构建/运行,工具栏和导航栏都会变成白色,无论我将其设置为什么颜色!

就好像代理在某处缓存一样。当我删除该应用程序,然后重新安装时,RGB 值会按原样显示,直到我更改它们并再次重建。

有其他人经历过吗?是不是我做错了什么?

更新 1:

现在,我注意到,它会在编译时间之间任意切换到白色背景,甚至无需更改 RGB。 (注意:上面的 RGB 应该返回微红色。)

更新 2:

我亲爱的未婚妻碰巧看着我,注意到在我的测试用例中,问题似乎只发生在我一次在多个 RGB 通道中具有值时。

例如:

UIColor *tint = [UIColor colorWithRed:212 green:0 blue:0 alpha:1.0];

工作,而

UIColor *tint = [UIColor colorWithRed:212 green:63 blue:69 alpha:1.0];

不会。

解决方案?

请改用colorWithHue:saturation:brightness:alpha:

【问题讨论】:

【参考方案1】:

问题是[UIColor colorWithRed: green: blue: alpha:] 需要一组从0.0f1.0f 的浮点数。你传入了一组整数。

【讨论】:

以上是关于编译时间之间的 UIAppearance 代理缓存外观?的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIAppearance 代理设置 UILabel 样式

限制 UIAppearance 代理范围

如何使 UIAppearance 代理适用于以编程方式创建的视图?

使用 UIAppearance 代理自定义字体时,MFMailComposeViewController 不起作用

检测自定义按钮的 UIAppearance 代理中的更改

UIAppearance 代理规则何时应用于新的视图控制器?