我有一个UIColor的扩展来从十六进制字符串中获取颜色。我按照以下方式使用它:
self.navigationItem.rightBarButtonItem?.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor(hexString: "#C0BFC0")], for: UIControlState.disabled)
self.navigationItem.rightBarButtonItem?.isEnabled = false
由于某种奇怪的原因,rightBarButtonItem
的颜色与以前相同。有没有办法在禁用时更改它?我在viewDidLoad函数中有上面的内容
我试过阅读以下内容:
UIBarButtonItem is disabled, but has normal color
Change color of disabled bar button item in iOS
我可以在未禁用时更改颜色。似乎什么时候禁用它的颜色不被遵守?
答案 0 :(得分:1)
当它被禁用时,颜色不被遵守?
我用一些工具栏项目来点击这个bug。我的解决方法是确保在禁用的颜色应该更改时,UIBarButtonItem标题在运行时更改。要执行此操作,请更改禁用的颜色,然后根据需要通过添加不可见的Unicode空间强制更改标题。
例如在Swift中:
let zeroWidthSpaceStr = "\u{200B}"
func forceChangeItemTitle(_ item:UIBarButtonItem, newTitle:String) {
// Ensure the button item title is changed. Needed to pick up change in disabled text color
var newTitle = newTitle
if item.title == newTitle {
// Title already set, so change it invisibly
newTitle += zeroWidthSpaceStr
}
item.title = newTitle
}