条形按钮项目色调颜色不起作用

Bar Button Item Tint Color not working

如您在附图中所见,条形按钮的色调颜色设置为红色,但显示为黑色。我认为这是因为文本颜色仍然是黑色?有办法改变吗?

我更改了此栏按钮项、它所在的导航栏、UIBarButtonItem.appearance() 以及 UINavigationBar.appearance() 的色调。关闭弹出窗口并重新打开它会更改颜色。

编辑

在下面的层次结构中,栏按钮具有正确的色调(无文本),标签具有正确的色调和文本颜色,但标签具有不同的色调和文本颜色。文本颜色仍然是旧主题中的颜色,并且在关闭并重新打开视图之前不会更新。

然而,按住按钮会导致它以新颜色闪烁,然后逐渐变回正常。

这是我用来设置样式 UIBarButtonItem 的一段代码:

extension UIBarButtonItem {

   func style(tint color: UIColor, font f: UIFont? = nil) {
       let font = f ?? UIFont.systemFont(ofSize: UIFont.systemFontSize)
       tintColor = color
       let atts = [
           NSAttributedStringKey.font : font,
           NSAttributedStringKey.foregroundColor : color
       ]
       setTitleTextAttributes(atts, for: .normal)
   }

}

这应该已经结束了,但是尝试重复更改标题属性和色调颜色(例如,在按钮操作上)显示没有任何反应,除非栏按钮项目的标题发生变化。这是一种奇怪的行为,但一个简单的解决方法就是这样做,通过在标题末尾添加和删除额外的 space 来更改标题,例如:

// 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 + " "