2017-01-19 7 views
4

最近、最近のiOS 10アップデートの1つで、tintColorプロパティの動作が大幅に変更されていることに気付きました。UIBarButtonItem色合いが機能しない

私は完全に以前に動作していたコードを持っていましたが、これはまったく動作しません。

私のアプリケーションの1つに、UIBarButtonItemのコレクションがあり、これはビューコントローラのtoolbarItemsアレイに追加されています。彼らはうまく表示されます。

しかし、ある時点で、ユーザーの操作に応じて特定の項目の色合いを変更したいと考えています。コードは簡単です:

flagButton.tintColor = [UIColor redColor]; 

このコードは以前は動作していましたが、今は動作しません。私はUIBarButtonItemへの参照が存在し、このコード行が実行されることを確認しました。しかし、色合いは変わらない。 tintColorプロパティの説明では

それは言う:

ときに、このプロパティの変更サブビューのレンダリングを更新するには、tintColorDidChange()メソッドをオーバーライドします。

私はtintColorDidChangeメソッドを追加しようとしたが、それは呼び出されません。この段階での私の前提は、tintColorが変更されると、私のボタンは自動的にリフレッシュされないということです。

誰かが手作業でリフレッシュする方法を見つけるのを助けることができますか?ボタンは画像付きの標準UIBarButtonItemです。 1

更新は実際に私は、私は、ツールバーの代わりに、個々の項目のtintColorを変更した場合、コードが動作していることに気づきました。何らかの理由で個々のアイテムの色合いを設定しても機能しなくなったようです。誰がなぜこれが当てはまるのか知っていますか?

アップデート2

私は問題の原因を見つけることができたマットのヒントに感謝します。今、私はこの行はUIBarButtonItem色合いの色に問題が生じた理由として完全に困惑しています...それはそれはにいくつかのあいまいさを導入する可能性があるため

[[UITableViewCell appearance] setTintColor:[ColourTheme sharedTheme].navBackground]; 

:それはアプリが起動された時に実行されるコードによって引き起こされましたUIAppearance。とにかく、私はもはや私はそれを簡単に削除することができますこの行が必要なくなりました。私はそのような行動が非常に奇妙であると思うので、私の質問を開いたままにしておきます。そして、ある意味で、質問は未だに答えられていません。

追加情報と同様に、これらの問題を経験したビューコントローラにはテーブルビューが含まれていました。

+0

ワウ私は全く同じ問題があります – Renetik

答えて

1

問題は再現できません。ここでは、赤と緑の間の右のバーボタンアイテムの色合いを交互に変えていることがわかります。これはバーボタンアイテムのtintColor直接コード内に設定することで行われます

enter image description here

 let c = self.replyButton.tintColor 
     if c == UIColor.red { 
      self.replyButton.tintColor = .green 
     } else { 
      self.replyButton.tintColor = .red 
     } 

したがって、私はあなたが見ている問題はあなたがについての私達に語っていない他の何かによって引き起こされていると結論付けています。

+0

これを指摘してくれてありがとう!私はこれが新しい行動ではないことを知ったので、私は深く掘り下げて、UIAppearanceを使って特定の視覚的スタイリングを設定しているので、問題が存在することを理解し始めました。私はまだそれらのどれが問題を引き起こしているのか把握していないが、一度それを更新する。いずれにしても、tintColorを手動で設定すると、UIAppearanceの設定を上書きできるはずです... –

+0

問題が見つかりました。質問を更新しました。私はまだ何が起こっていたのか困惑していますが、私を正しい方向に向けるためにとにかくありがとう! –

+0

また、私のこの回答が何らかの形で関係するかもしれません:http://stackoverflow.com/a/21592073/341994 – matt

1

は、だから私の場合には、この行didFinishLaunchingWithOptionsに設定

UIActivityIndicatorView.appearance.tintColor = FlatWhite;

は青デフォルトにすべてUIBarItemItems.tintColorを変更し、それを親バーの上に半透明の色を設定することによって以外の方法を変更することはできませんでした。 ..

私はこの行をコメントアウトすると、コメントを外すとすべてが機能しなくなります。私にとってこれはIOSフレームワークの明確なバグです。それは他のケースではほとんど変わらないので、予測するのは難しいです。

0

UIImageRenderingMode.alwaysOriginalを使用していると思われますが、問題が発生します。

public enum UIImageRenderingMode : Int { 

    case automatic // Use the default rendering mode for the context where the image is used 
    case alwaysOriginal // Always draw the original image, without treating it as a template 
    case alwaysTemplate // Always draw the image as a template image, ignoring its color information 

} 

使用.alwaysTemplate代わり

0

私は同じ問題に遭遇し、次の手順を取ることによって、それを解決することになった:

1)バーボタン項目にアウトレットを作成します。

override func viewWillAppear(animated: Bool) { 
    let barButtonAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white] 
    closeButton.setTitleTextAttributes(barButtonAttributes, for: .normal) 
} 

はこれがUIAppearanceのデフォルト設定を上書きしてviewWillAppearにコードを配置してください:鉱山は、次のコードを書く)「closeButton」 2と呼ばれていました。

関連する問題