【发布时间】:2018-08-06 01:24:11
【问题描述】:
我正在尝试在屏幕之间设置 UINavigationBar 外观(tintColor、barTintColor 等),但目前在 iOS 11 中,大部分内容似乎被完全忽略或不符合预期。当视图被推送或弹出时,栏的外观会在单个导航控制器内发生变化。我有两个函数,我调用viewWillAppear。
我需要能够设置标题颜色、左右栏按钮项目颜色、后退按钮颜色和栏色调颜色。
我目前正在尝试让颜色正常工作,所以我尝试了这个,但没有任何乐趣。
public func setDarkHeaderStyle() {
UIApplication.shared.statusBarStyle = .lightContent
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = Colours.secondaryNavy
UINavigationBar.appearance().isTranslucent = false
}
public func setLightHeaderStyle() {
UIApplication.shared.statusBarStyle = .default
UINavigationBar.appearance().tintColor = Colours.primaryNavy
UINavigationBar.appearance().barTintColor = UIColor.white
UINavigationBar.appearance().isTranslucent = false
}
如果我改用导航控制器设置颜色,它确实适用于条形色调、UIBarButtonItem 和后退按钮,但标题不正确。
public func setDarkHeaderStyle() {
UIApplication.shared.statusBarStyle = .lightContent
navigationController?.navigationBar.tintColor = UIColor.white
navigationController?.navigationBar.barTintColor = Colours.secondaryNavy
navigationController?.navigationBar.isTranslucent = false
}
public func setLightHeaderStyle() {
UIApplication.shared.statusBarStyle = .default
navigationController?.navigationBar.tintColor = Colours.primaryNavy
navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.isTranslucent = false
}
所以我手动设置标题文本属性如下:
public func setDarkHeaderStyle() {
UIApplication.shared.statusBarStyle = .lightContent
navigationController?.navigationBar.titleTextAttributes = [
NSAttributedStringKey.font: UIFont(name: Fonts.fontRegularName, size: 16)!,
NSAttributedStringKey.kern: 0.2,
NSAttributedStringKey.foregroundColor: UIColor.white
]
navigationController?.navigationBar.tintColor = UIColor.white
navigationController?.navigationBar.barTintColor = Colours.secondaryNavy
navigationController?.navigationBar.isTranslucent = false
}
public func setLightHeaderStyle() {
UIApplication.shared.statusBarStyle = .default
navigationController?.navigationBar.titleTextAttributes = [
NSAttributedStringKey.font: UIFont(name: Fonts.fontRegularName, size: 16)!,
NSAttributedStringKey.kern: 0.2,
NSAttributedStringKey.foregroundColor: Colours.primaryNavy
]
navigationController?.navigationBar.tintColor = Colours.primaryNavy
navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.isTranslucent = false
}
这似乎有效,除了当你弹回到根视图时,标题颜色没有设置:
我想我有两个问题:
为什么UINavigationBar.appearance() 不起作用?
我怎样才能让它可靠地工作?
【问题讨论】:
-
为什么不在view-contoller中使用
preferredStatusBarStyle,例如在viewWillAppear(_:)方法中设置导航栏的外观? -
嗯,状态栏样式工作正常...这是
UINavigationBar的标题不起作用,我在viewWillAppear中设置。这些函数中的每一个都在 viewWillAppear 中调用。
标签: ios swift uinavigationcontroller uinavigationbar