【Swift UI/Apple Watch】Pickerの実装方法!緑色の枠の非表示方法と高さ調整

この記事からわかること

  • Swift UIApple Watchアプリ開発する方法
  • Picker実装デザイン
  • 緑色枠線非表示にする方法
  • アイテム背景色高さ変更する方法

index

[open]

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

みんなの誕生日

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

posted withアプリーチ

環境

【Swift UI/Apple Watch】Pickerの実装方法!緑色の枠の非表示方法と高さ調整

watchOSでピッカーを実装する方法

watchOSでピッカーを実装するには基本的にSwift UIのPicker構造体を使用して実装することができます。

おすすめ記事:【Swift UI】Pickerの書式と使い方とスタイル変更!配列や列挙型

struct ContentView: View {
    @State  private var selectedLang = "Swift"
    private let langs = ["Swift", "Kotlin", "Dart", "Objective-C", "Java"]
    
    var body: some View {
        VStack {
            Picker(selection: $selectedLang, label: Text("language")) {
                ForEach(langs, id: \.self) { lang in
                    Text(lang)
                }
            }
        }
    }
}

watchOSのPickerはデフォルトがWheelスタイルのデザインになっており、フォーカスが当たっている時に緑色の枠線が表示される状態になります。

【Swift UI/Apple Watch】Pickerの実装方法!緑色の枠の非表示方法と高さ調整

緑色の枠線を消したい場合

【Swift UI/Apple Watch】Pickerの実装方法!緑色の枠の非表示方法と高さ調整

デフォルトで表示されている緑色の枠線を消したい場合は現在モディファイアからは提供されていないようです。そのためlabelsHiddenでラベルを非表示にして、border黒色の枠線を重ねることで消すことができました。

Picker(selection: $selectedLang, label: Text("language")) {
    ForEach(langs, id: \.self) { lang in
        Text(lang)
    }
}.labelsHidden()
    .border(Color.black, width: 5)

ピッカーアイテムの背景色を変更する

中のアイテムの背景色を変更するにはbackgroundモディファイアなどを使用してカスタマイズするだけです。

【Swift UI/Apple Watch】Pickerの実装方法!緑色の枠の非表示方法と高さ調整
Picker(selection: $selectedLang, label: Text("language")) {
    ForEach(langs, id: \.self) { lang in
        Text(lang)
            .frame(width: 200)
            .background(.cyan)
            .opacity(0.5)
    }
}.labelsHidden()
    .border(Color.black, width: 5)

ピッカーアイテムの高さを変更する

公式リファレンス:defaultWheelPickerItemHeightメソッド

iOS側のPickerには用意されていませんがwatchOS側にはピッカーアイテムの高さを変更できるdefaultWheelPickerItemHeightモディファイアが用意されています。これを使用することでピッカーアイテムの大きさを自由に変更することができます。

【Swift UI/Apple Watch】Pickerの実装方法!緑色の枠の非表示方法と高さ調整
Picker(selection: $selectedLang, label: Text("language")) {
    ForEach(langs, id: \.self) { lang in
        Text(lang)
            .frame(width: 200, height: 50)
            .background(.cyan)
            .opacity(0.5)
    }
}.defaultWheelPickerItemHeight(80)
    .labelsHidden()
    .border(Color.black, width: 5)

別のスタイルに変更する

Wheelスタイル以外に変更したい場合はFormで囲うかpickerStyle(.navigationLink)を指定することで以下のような別画面から選択形式のピッカーに変更することが可能です。

【Swift UI/Apple Watch】Pickerの実装方法!緑色の枠の非表示方法と高さ調整 【Swift UI/Apple Watch】Pickerの実装方法!緑色の枠の非表示方法と高さ調整
Form {
    Picker(selection: $selectedLang, label: Text("Language")) {
        ForEach(langs, id: \.self) { lang in
            Text(lang)
        }
    } // .pickerStyle(.navigationLink) 
}

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

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

searchbox

スポンサー

ProFile

ame

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

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

New Article

index