我试图在屏幕之间设置UINavigationBar外观(tintColor
,barTintColor
等),但目前在iOS 11中,大部分内容似乎完全被忽略或者没有&#39 ; t表现如预期。当按下或弹出视图时,单个导航控制器内的条形外观会发生变化。我有两个函数,我在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()
无效?
我怎样才能让它可靠地工作?
答案 0 :(得分:3)
我认为这是一个错误。 UIBarNavigationItem
由于某种原因似乎忽略了对标题属性和色调颜色的更改,除非标题文本发生变化。这是一种奇怪的行为,您可以考虑报告它。解决方法可能是将空白后缀切换到标题:
// Hack!!! adds and removes an empty space to the title to
// force the bar item reset title attributes.
let title: String = barItem.title ?? ""
barItem.title = title.hasSuffix(" ") ? String(title.dropLast()) : title + " "