禁用时设置 UIBarButtonItem 灰色

Posted

技术标签:

【中文标题】禁用时设置 UIBarButtonItem 灰色【英文标题】:Set UIBarButtonItem gray color when disabled 【发布时间】:2017-05-26 18:29:33 【问题描述】:

我有一个 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

当它未被禁用时,我可以更改颜色。似乎当它被禁用时,颜色不被遵守?

【问题讨论】:

我也遇到了这个错误,它似乎只发生在 Swift 或最近的 iOS 版本中。我的解决方法是使用常规 UIButton 并将 UIBarButtonItem 用作自定义视图。 UIButton可以正常修改。 【参考方案1】:

当它被禁用时,颜色不被遵守?

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

例如在 Swift 中:

let zeroWidthSpaceStr = "\u200B"

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

【讨论】:

以上是关于禁用时设置 UIBarButtonItem 灰色的主要内容,如果未能解决你的问题,请参考以下文章

UIBarButtonItem 是蓝色的,但应该是灰色的

如何以编程方式禁用/启用UIBarButtonItem

UIBarButtonItem 在视图更改之前不会被禁用

在执行自定义 segue 之前禁用工具栏 UIBarButtonItem

为啥 UIBarButtonItem 默认是禁用的?

UIBarButtonItem 如何禁用辅助功能 (iOS)