2017-05-26 21 views
1

UIColorの拡張があり、16進文字列から色を取得しています。私は以下の通りそれを使用しています:無効にすると、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

色が無効になっている場合は無効にしますか?

私はいくつかのツールバー項目でこのバグを発見しました。私の回避策は、無効になった色を変更する必要があるときに、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 
}