我正在创建我的应用程序中的自定义元素,希望与新版iOS的外观和感觉相匹配。 iOS 7向我们介绍了非常普遍的浅蓝色,这是几个元素的默认颜色或色调,包括系统按钮、分段控制等。他们使用IB很容易选择颜色,如下图所示:
然而,我没有找到如何通过编程方式轻松访问该颜色。我查看了UIColor文档,在类本身中似乎没有任何访问蓝色系统颜色的访问器。
这里是我的问题:是否存在此颜色的简单访问器?[UIColor ?]
或类似的东西?如果不存在,有人知道该颜色的确切RGB值吗?
从视图控制器中使用self.view.tintColor
,或者从UIView
子类中使用self.tintColor
。
看起来是 [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0]
。
UIColor(red: 0.0, green: 122.0/255.0, blue: 1.0, alpha: 1.0)
- Doug AmosiOS 7 默认的蓝色颜色是 R:0.0 G:122.0 B:255.0
UIColor *ios7BlueColor = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];
0x007aff
。 - Jason Moore根据UIButton文档:
iOS v7.0中,所有UIView的子类都从基类继承tintColor行为。有关更多信息,请参见UIView级别的tintColor讨论。
假设您在获取默认值之前不更改tintColor,则可以使用:
self.view.tintColor
sharedApplication()
没有带有tintColor
的keyWindow
。 - SimplGy这里有一个获取默认系统色调颜色的简单方法:
+ (UIColor*)defaultSystemTintColor
{
static UIColor* systemTintColor = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
UIView* view = [[UIView alloc] init];
systemTintColor = view.tintColor;
});
return systemTintColor;
}
dispatch_once
的开销非常低,并且在普通情况下只需要进行一次if检查。 - RickUIColor
是安全的。将其包装在dispatch_once
中允许在任何线程上安全地检索此颜色。而且,开销非常低。 - RickSwift 4 的方式:
extension UIColor {
static let system = UIView().tintColor!
}
使用预定义的系统颜色创建本机扩展程序,可以得到您想要的效果:
// System colors
extension UIColor {
/* Some colors that are used by system elements and applications.
* These return named colors whose values may vary between different contexts and releases.
* Do not make assumptions about the color spaces or actual colors used.
*/
...
@available(iOS 7.0, *)
open class var systemBlue: UIColor { get }
...
}
您可以直接使用:
myView.tintColor = .systemBlue
static let system = UIView().tintColor!
仍然比您的变体要好得多。 - Dmitry Kozlov通过使用此代码,自动获取颜色:
static let DefaultButtonColor = UIButton(type: UIButtonType.System).titleColorForState(.Normal)!
UIWindow.tintColor
方法在 iOS8 中对我无效(仍然是黑色),所以我不得不这样做:
let b = UIButton.buttonWithType(UIButtonType.System) as UIButton
var color = b.titleColorForState(.Normal)
这给了UIBarButtonItem
中所看到的正确蓝色色调。
UIView().tintColor
,但实际上不能。不确定何时设置了UIView的色调颜色... - Dan RosenstarkUIWindow
或者它的根视图有原始版本。视图从响应链中更高的视图继承其色调颜色,但在你的例子中新视图没有父视图。 - Aaron BragerUIViewController.viewDidLoad()
中使用self.view.tintColor
可以得到正确的蓝色。 - Nicolas Miari