UINavigationBar.appearance().tintColor 在 Swift 中不起作用
UINavigationBar.appearance().tintColor does not work in Swift
我将一个文件从 Objective_c 移植到 Swift,其中的配置改变了标签栏的颜色:我在 objective-c 中使用的代码是:
UIColor* barColor=[UIColor colorWithRed:.88 green:.05 blue:.05 alpha:1];
if([self.navigationController.navigationBar respondsToSelector:@selector(barTintColor)])
{
// iOS7
self.navigationController.navigationBar.barTintColor = barColor;
}
else
{
[[UINavigationBar appearance] setTintColor:barColor];
// older
//self.navigationController.navigationBar.tintColor = barColor;
}
[super viewWillAppear:animated];
与Swift中对应的代码为:
let barColor = UIColor(red:0.88, green:0.05, blue:0.05, alpha:1)
if UIDevice.currentDevice().systemVersion.compare("8.0", options: .NumericSearch) == .OrderedDescending
{
// iOS8+
UINavigationBar.appearance().tintColor=barColor
//UINavigationBar.appearance().translucent=false
}
else
{
self.navigationController!.navigationBar.barTintColor = barColor;
}
然而,虽然 objective-c 代码确实改变了选项卡栏的颜色,但相应的 swift 代码却毫发无损,至少在模拟器上是这样。我做错了什么?
问题是由于 IOS 9 错误导致导航栏未在 ViewWillAppear 时间初始化。我通过有选择地访问它解决了这个问题:
self.navigationController?.navigationBar.barTintColor = barColor;
此代码适用于 iOS7+,因此不需要任何条件。
应在应用程序启动时应用外观设置。
所以最好设置:
UINavigationBar.appearance().tintColor = barColor
在
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UINavigationBar.appearance().tintColor=barColor
return true
}
我将一个文件从 Objective_c 移植到 Swift,其中的配置改变了标签栏的颜色:我在 objective-c 中使用的代码是:
UIColor* barColor=[UIColor colorWithRed:.88 green:.05 blue:.05 alpha:1];
if([self.navigationController.navigationBar respondsToSelector:@selector(barTintColor)])
{
// iOS7
self.navigationController.navigationBar.barTintColor = barColor;
}
else
{
[[UINavigationBar appearance] setTintColor:barColor];
// older
//self.navigationController.navigationBar.tintColor = barColor;
}
[super viewWillAppear:animated];
与Swift中对应的代码为:
let barColor = UIColor(red:0.88, green:0.05, blue:0.05, alpha:1)
if UIDevice.currentDevice().systemVersion.compare("8.0", options: .NumericSearch) == .OrderedDescending
{
// iOS8+
UINavigationBar.appearance().tintColor=barColor
//UINavigationBar.appearance().translucent=false
}
else
{
self.navigationController!.navigationBar.barTintColor = barColor;
}
然而,虽然 objective-c 代码确实改变了选项卡栏的颜色,但相应的 swift 代码却毫发无损,至少在模拟器上是这样。我做错了什么?
问题是由于 IOS 9 错误导致导航栏未在 ViewWillAppear 时间初始化。我通过有选择地访问它解决了这个问题:
self.navigationController?.navigationBar.barTintColor = barColor;
此代码适用于 iOS7+,因此不需要任何条件。
应在应用程序启动时应用外观设置。 所以最好设置:
UINavigationBar.appearance().tintColor = barColor
在
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UINavigationBar.appearance().tintColor=barColor
return true
}