在UISegmentedControl的情况下,一旦出现弹出框或警报,控件就会变暗为灰色(使色调颜色不饱和)
我正在构建自己的 UIControl 子类,它使用 UILabel 作为子视图
我想使UILabel的文本颜色变暗(去饱和),与UISegmentedControl或(UIButton...)相同的方式
查看 UIView 上的 tintColor
和 tintAdjustmentMode
属性(从 iOS 7 开始可用)和 tintColorDidChange
方法。
如果在自定义视图中覆盖它们,则可以响应变暗。
正如iOS 7 UI转换指南所说:
当提醒或操作表出现时,iOS 7 会自动使其后面视图的色调颜色变暗。为了响应此颜色更改,在其呈现中使用
tintColor
的自定义视图子类应重写tintColorDidChange
以在适当时刷新呈现。
解决方案可能如下所示:
- (void)tintColorDidChange {
self.titleLabel.textColor = self.tintColor;
}
虽然接受的答案确实对我有帮助,但结果是即使屏幕没有变暗,变暗的颜色也会应用于我的控件。我通过以下方式解决此问题:
override func tintColorDidChange() {
switch tintAdjustmentMode {
case .Dimmed:
myLabel.textColor = UIColor.grayColor()
default:
myLabel.textColor = UIColor.blueColor()
}
}
仅当屏幕变暗时,才会正确地将灰色应用于控件。