禁用时设置UIBarButtonItem灰色

问题描述:

我有一个扩展UIColor从十六进制字符串中获取颜色。我用它作为每如下:禁用时设置UIBarButtonItem灰色

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

我遇到这个错误太,它似乎只与斯威夫特也许最近的iOS版本的发生。我的解决方法是使用常规的UIButton,并将UIBarButtonItem作为自定义视图进行初始化。 UIButton可以正常修改。 – Siegfoult

当其禁用颜色不服从?

我用一些工具栏项打这个bug。我的解决方法是确保UIBarButtonItem标题在运行时更改,禁用的颜色应该更改。为此,请更改禁用的颜色,然后根据需要添加不可见的Unicode空间来强制更改标题。

例如在斯威夫特:

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 
}