简单说下tintColor

最近遇到了一个问题,弹窗消失之后,APP导航栏的颜色变暗,弹框样式如下:

20170523-2

起初以为是修改了导航栏的颜色,后来发现是导航栏着色tintColor渲染模式修改造成的。

tintColor

每个APP基本上都会有一个主色调,这个时候我们一般都会使用tintColor来设置。它比较明显的作用是影响系统默认的返回文字的颜色和一些操作按钮的颜色,这样可以方便的帮我们来设置主色调。

苹果的文档当中是这样描述的

tintColor

The first nondefault tint color value in the view’s hierarchy, ascending from and starting with the view itself.

Discussion

If the system cannot find a nondefault color in the hierarchy, this property’s value is a system-defined color instead.

If the view’s tintAdjustmentMode property’s value is UIViewTintAdjustmentModeDimmed, then the tintColor property value is automatically dimmed.

To refresh subview rendering when this property changes, override the tintColorDidChange method.

Colors that are pattern colors (as described in UIColor) are not supported.

文档的大致意思是tintColor是视图层级当中的第一个非默认的着色颜色,当视图层级中不存在非默认的颜色值时,系统就会使用tintColor作为渲染的颜色值。当tintAdjustmentMode的值为UIViewTintAdjustmentModeDimmed时,所渲染出来的tintColor的颜色会变暗。

需要注意的一点是tintColor的查询是在视图层级中一次次往上的,所以你父视图的设置会影响子视图的渲染。子视图想要呈现不同的颜色时,需要设置颜色或者它自己的tintColor

问题解决

我们上面提到的导航栏颜色变暗就是因为弹框时需要一个暗色的背景,修改了视图的的tintAdjustmentModeUIViewTintAdjustmentModeDimmed,而在消失的时候忘记设置回默认值造成的,只需要在弹框消失时把视图的tintAdjustmentMode属性修改回来即可。