【Swift UI】SegmentedPickerStyleの背景色や選択色を変更する方法!

【Swift UI】SegmentedPickerStyleの背景色や選択色を変更する方法!

この記事からわかること

  • Swift UIPickerSegmentedPickerStyle背景色選択色変更する方法
  • UISegmentedControlappearanceカスタマイズ方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

Swift UIのSegmentedPickerStyleの背景色や選択色を変更する方法

Swift UIでピッカーを実装する際にSegmentedPickerStyleを指定すると以下のようなデザインになります。

 Picker(selection: $selectedLang, label: Text("language")) {
    ForEach(lang, id:\.self) { item in
        Text(item)
    }
}.pickerStyle(SegmentedPickerStyle())
【Swift UI】Pickerの例

デフォルトでは設定されているカラースキームによって白か黒の背景色、選択色になっています。これを背景色の変更はbackgroundを使用することで変更することが可能です。

 Picker(selection: $selectedLang, label: Text("language")) {
    ForEach(lang, id:\.self) { item in
        Text(item)
    }
}.pickerStyle(SegmentedPickerStyle())
    .background(Color.gray) // 背景色をグレーに設定
【Swift UI】SegmentedPickerStyleの背景色や選択色を変更する方法!

しかし選択色を変更するモディファイアは現在まだ定義されていないので元のViewクラスであるUISegmentedControlappearanceを直接変更することで色を変えることができるようになります。

UISegmentedControlのappearanceを調整する

UISegmentedControlappearanceselectedSegmentTintColorの値を変更することでピッカーで選択されてるアイテムの背景色を変更することが可能です。

init() {
    let appearance = UISegmentedControl.appearance()
    // 選択しているアイテムの背景色
    appearance.selectedSegmentTintColor = .systemIndigo
}
【Swift UI】SegmentedPickerStyleの背景色や選択色を変更する方法!

テキストカラーやフォントなど

UISegmentedControlappearanceからでも背景色やテキストカラーなんかも変更することができます。setTitleTextAttributesにはNSAttributedString型で文字の属性を細かく指定することが可能です。

おすすめ記事:【Swift】NSAttributedStringの使い方!文字サイズや装飾を変更する

【Swift UI】SegmentedPickerStyleの背景色や選択色を変更する方法!
init() {
    let appearance = UISegmentedControl.appearance()
    // 選択しているアイテムの背景色
    appearance.selectedSegmentTintColor = .systemIndigo

    // ピッカー全体の背景色
    appearance.backgroundColor = .gray

    let font = UIFont.boldSystemFont(ofSize: 18)
    // 未選択アイテムの文字属性
    appearance.setTitleTextAttributes([.font: font, .foregroundColor: UIColor.black], for: .normal)
    // 選択アイテムの文字属性
    appearance.setTitleTextAttributes([.font: font, .foregroundColor: UIColor.white], for: .selected)
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index