16

クラスの要素についてはUIButtonUIBarButtonItemそれらが自動的window.tintColorにメインの色と見なされることを知っています。これは、アプリでいつでもウィンドウに新しい tintColor を設定するとすぐに変更されます。

要素を同じパターンに従うようにする方法があるかどうか疑問に思ってUILabelいました.一度作成すると、デフォルトの色が自動的に想定され、アプリのランタイム内でいつでも変更すると、tintColour も自動的に変更されwindow.tintColorますか?window.tintColorUILabel

それが理にかなっていることを願っています。

4

2 に答える 2

35

UILabelsは のサブクラスでUIViewあるため、iOS 7 で実行している場合、プロパティがあり、ティント カラーが に設定されている場合 (デフォルト) tintColor、親ビューからその色を継承します。nil

Appleのドキュメントから:

デフォルトでは、ビューのティント カラーは nil です。これは、ビューがその親のティントを使用することを意味します。また、ビューにティント カラーを要求すると、設定していなくても常にカラー値が返されることも意味します。

ただし、「アプリのランタイム内の任意の時点で window.tintColor を変更すると、UILabel の tintColour も自動的に変更されるかどうか」という質問も出されます。Apple は、項目が画面に表示されているときは色合いを変更しないことをお勧めします。

一般に、ビューが画面外にあるときにビューの色合いを変更することをお勧めします。

これは、さまざまな UI 要素がすべて tintColor の変更を検出し、表示されているビューを更新するという保証がないためだと思います。ただし、UIViewドキュメントでは、画面に表示されtintColorている間に更新する場合の回避策を提案しています。UILables

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

そのため、親ビューの が変更さtintColorDidChangeれたときに色合いが更新される必要がある、現在画面上にあるビューを呼び出すようにしてください。tintColor

UILabelしかし、あなたの の色を更新しないのはなぜですか?

上記は、さまざまな を設定および更新するのに役立ちますがtintColor、効果が見られません-なぜですか?

それは、Apple が Tint に表示するように設計したことと関係があります。ヒューマン インターフェイス ガイドラインから:

色はインタラクティブ性を強く視覚的に示します

Apple は、インタラクティブな要素の周りの境界線とグラデーションを取り除き、それらを色に置き換えましたtintColor。背後にある全体的な考え方tintColorは、ユーザーがタップできるものは取得し、タップできないものは取得しないということです。

UILabelはインタラクティブな要素ではなく、テキストによる説明です。そのため、Apple では を設定することができますがtintColor(いずれもUIViewがありますtintColor)、tintColor描画方法は変更されません。

それで、あなたは何をすべきですか?まず、ボタンだけでなく薄い色にすることは、アプリの UI の選択として適切ではない可能性があることに注意してください。iOS 7 ユーザーと Apple アプリのレビュアーは、これらのルールに従うことを期待しています。

それで、あなたUILabelは色から自由に保つことを余儀なくされていますか?

いいえ-特に「正しい」ことをしている場合。アップルは次のように説明しています。

コンテンツ領域では、必要な場合にのみボタンの境界線または背景を追加します。バー、アクション シート、およびアラートのボタンに境界線は必要ありません。ユーザーは、これらの領域のほとんどのアイテムがインタラクティブであることを知っているからです。一方、コンテンツ領域では、他のコンテンツと区別するために、ボタンに境界線または背景が必要になる場合があります。

アプリの UI を検討することをお勧めします。非tintColorインタラクティブな要素をインタラクティブな要素と同じにしたい場合は、境界線や背景色など、より多くのものを使用して、ユーザー (および Apple アプリのレビュアー) がクリック可能なものとそうでないものを理解できるようにしてください。 .

色を更新する方法については、手動でプロパティを任意の色に設定するか、そのオーバーライドtextColorの独自のサブクラスを作成して、通知が送信されたときにプロパティを更新する必要があります。親の に一致するようにテキストが更新される。UILabel- (void)tintColorDidChangetextColorUILabeltintColor

これが役立つことを願っています!

于 2013-10-09T03:41:25.340 に答える