如何通过代码更改iOS7 / iOS8上的全局色调颜色?我想更改使用此属性的多个对象,但不更改每个对象,这就是为什么要使用全局着色属性。
如何通过代码更改iOS7 / iOS8上的全局色调颜色?我想更改使用此属性的多个对象,但不更改每个对象,这就是为什么要使用全局着色属性。
Answers:
只需更改UIWindow
的tintColor
应用程序中的代表,它是作为默认为所有的自动传递UIView
后代。
[self.window setTintColor:[UIColor greenColor]];
UIView
,因此您可以在视图层次结构中的任何视图上设置它,并且其所有后代都将继承相同的默认值tintColor
(除非您另外指定)
if([window respondsToSelector:@selector(setTintColor:)])
[[UIView appearance] setTintColor:[UIColor greenColor]];
UIView
的tintColor
没有UI_APPEARANCE_SELECTOR
注释。这个答案是错误的。
UIAppearance
在iOS 5中引入的一种方式来处理全局颜色(及以上),但随后的iOS 7的苹果移动tintColor
到UIView
并使其传播到子视图。苹果在iOS 7 UI过渡指南中指出:“ iOS 7不支持使用外观代理API设置tintColor属性。” 但是它似乎仍然有效。
UIWindow
的tintColor
属性或全局色彩的影响。
self.window?.tintColor = UIColor(netHex: 0xc0392b)
了。
您可以通过设置窗口的tint属性为整个应用程序指定颜色。为此,您可以使用类似于以下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window.tintColor = [UIColor purpleColor];
return YES;
}
为Swift 2.2更新
您可以从任何地方执行以下操作:
// Get app delegate
let sharedApp = UIApplication.sharedApplication()
// Set tint color
sharedApp.delegate?.window??.tintColor = UIColor.green()
或者,如果您尝试通过AppDelegate执行此操作,
self.window?.tintColor = UIColor.green()
以下对我没用的东西:
navigationItem.backBarButtonItem?.tintColor = Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR
navigationItem.backBarButtonItem?.setTitleTextAttributes([NSAttributedString.Key.foregroundColor : Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR], for: .normal)
self.navigationController?.navigationBar.barStyle = UIBarStyle.black
navigationController?.navigationBar.barTintColor = Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR
navigationController?.navigationBar.tintColor = Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR
navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor : Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR]
以下工作:
要么
对于整个应用程序:
let sharedApp = UIApplication.sharedApplication()
sharedApp.delegate?.window??.tintColor = UIColor.green()
对于特定控制器:
在初始化时设置窗口的颜色,并在反初始化时重新设置应用程序的默认颜色。
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
let window = UIApplication.shared.windows.first
window?.tintColor = Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR
}
required init?(coder: NSCoder) {
super.init(coder: coder)
let window = UIApplication.shared.windows.first
window?.tintColor = Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR
}
deinit {
let window = UIApplication.shared.windows.first
window?.tintColor = Theme.light.App.DEFAULT_TINT_COLOR
}