1. ホーム
  2. ios

[解決済み] iOS 13でUISegmentedControlのセグメントの色を変更するには?

2022-07-16 06:08:36

質問

A UISegmentedControl は iOS 13 で新しい外観を持ち、セグメント化されたコントロールの色を変更する既存のコードは、もはや以前のようには機能しません。

iOS 13 より前のバージョンでは tintColor を設定することができ、セグメントコントロールの周囲の境界線、セグメント間の線、選択されたセグメントの背景色に使用されました。そして、foreground color 属性を使用して、各セグメントにあるタイトルの色を titleTextAttributes .

iOS 13 では tintColor は何もしません。セグメント化されたコントロールの backgroundColor を使用して、セグメント化されたコントロールの全体的な色を変更することができます。しかし、選択されたセグメントの背景として使用される色を変更する方法は見当たりません。テキスト属性の設定はまだ有効です。タイトルの背景色を設定することも試みましたが、それはタイトルの背景にのみ影響し、選択されたセグメントの残りの背景色には影響しません。

の現在選択されているセグメントの背景色を変更するにはどうすればよいのでしょうか? UISegmentedControl の現在選択されているセグメントの背景色を変更するにはどうしたらよいでしょうか? パブリック API を使用して、プライベートなサブビュー構造を掘り下げる必要のない、適切なソリューションはありますか?

iOS 13 には、新しいプロパティはありません。 UISegmentedControl または UIControl での変更はありません。 UIView は関係ありません。

どのように解決するのですか?

iOS 13b3 からは、このような場合に備えて selectedSegmentTintColorUISegmentedControl .

セグメント化されたコントロールの全体の色を変更するには、その backgroundColor .

選択されたセグメントの色を変更するには selectedSegmentTintColor .

選択されていないセグメントのタイトルの色/フォントを変更するには、次のようにします。 setTitleTextAttributes の状態で .normal / UIControlStateNormal .

選択されたセグメントのタイトルの色/フォントを変更するには setTitleTextAttributes の状態で .selected / UIControlStateSelected .

画像を含むセグメント化されたコントロールを作成する場合、画像がテンプレート画像として作成されるなら、セグメント化されたコントロールの tintColor は画像の色付けに使用されます。しかし、これには問題があります。もし tintColor と同じ色にすると selectedSegmentTintColor と同じ色にすると、選択されたセグメントには画像が表示されなくなります。もし tintColor と同じ色にすると backgroundColor と同じ色にすると、選択されていないセグメントの画像は表示されなくなります。つまり、画像付きのセグメントコントロールは、すべてを表示するために3つの異なる色を使用する必要があります。また、テンプレート以外の画像を使用する場合は tintColor .

iOS 12 以前のバージョンでは、セグメント化されたコントロールの tintColor を設定するか、アプリ全体の色合いカラーに依存します。