2017-05-26 65 views
1

我有一個擴展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

回答

1

當其禁用顏色不服從?

我用一些工具欄項打這個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 
}