1. 问题描述:
项目中,一个页面的NavigationBar是有动画效果的,Title的颜色会不断变化。测试的时候发现,在IOS7.0系统上本来应该是白色的Title变成了黑色。调试发现问题出在一个系统API上- getRed:green:blue:alpha:
。在7.0系统上对[UIColor whiteColor]
调用这个API,获取R、G、B值是错误的,均为接近0的小数,正确的结果是1。
2. 原因:
+ (UIColor *)blackColor; // 0.0 white
+ (UIColor *)darkGrayColor; // 0.333 white
+ (UIColor *)lightGrayColor; // 0.667 white
+ (UIColor *)whiteColor; // 1.0 white
+ (UIColor *)grayColor; // 0.5 white
原因是系统对部分颜色的存储进行了优化,用两个字节存储这些颜色,按RGB的存储方式去取值就会得到错误的值。7.0以上的系统,这个API对这些特殊存储的颜色进行了兼容处理,返回值是正确的。
3. 简单解决方法:
如果要用这个API- getRed:green:blue:alpha:
,用[UIColor colorWithRGB:0xffffff]
代替[UIColor whiteColor]
。