

Xcode12  
  
初めてのプログラミング言語にswiftを勉強中です。swiftでお絵描きアプリを作っています。エラーの表示は出ていませんが、Textに記述した"色"や"線幅"の文字が表示されず困っています。また、resumeするとTextの文字以外は正しく表示されます。  
  
**試したこと**  
Webで調べたり、参考書を見ながらコードを見直したりしましたが、Pickerの記述が間違っているのか、引数がおかしいのか特定できませんでした。widthやheightの値を変えてみたり、paddingやSpacerで間隔を空けてみたりしましたが、なぜエラーになっているのかわかりません。  
お手数ですが、どなたかご回答いただけると幸いです。

[code]

    import SwiftUI
    
    struct SettingView: View {
        @Environment(\.presentationMode) var presentationMode
        @Binding var colorSel:Int
        @Binding var lineWidth:Int
        @Binding var colors:[Color]
    
        var body: some View {
            VStack{
    
                Picker(selection: $colorSel, label: Text("色").frame(width: 40)) {
                    ForEach(0..<colors.count){ value in
                        if value == self.colors.count - 1 {
                            Image(systemName: "square")
                        } else {
                            Image(systemName: "paintbrush.fill")
                                .foregroundColor(self.colors[value])
                        }
                    }
                }
    
                Spacer()
    
                Picker(selection: $lineWidth, label: Text("線幅").frame(width: 40)) {
                    ForEach(1..<11){ value in
                        Text(String(value))
                    }
                }
                .frame(width: 30)
    
                Spacer()
    
                Button(action: {
                    self.presentationMode.wrappedValue.dismiss()
                }){
                    Text("閉じる")
                }
            }.padding()
        }
    }
    
    struct SettingView_Previews: PreviewProvider {
        static var previews: some View {
            SettingView(colorSel: .constant(0), lineWidth: .constant(3), colors: .constant([.black, .red, .blue, .green, .white]))
        }
    }
    
[/code]


CC BY-SA 4.0
2021-11-09T15:17:55.597
83528
2021-11-10T01:31:48.160
49015
question
swift ios xcode12
SwiftでPicker内にTextを表示したいがエラーになるので解決したいです


Apple社はSwiftUIに含まれるコンポーネントのUIデザイン変更をちょくちょく行なっており、iOSのバージョンの問題か、Xcodeの問題かまではわかりませんが、少し前(Xcode
12.2?)から「`Picker`の`label:`が表示されない」と言う話は出てきているようです。

[SwiftUI (Xcode 12.2)
のPickerのラベルが表示されない](https://www.o2-m.com/wordpress2/2020/12/01/swiftui-
xcode-12-2-%E3%81%AEpicker%E3%81%AE%E3%83%A9%E3%83%99%E3%83%AB/)

[Picker Label not showing
anymore](https://developer.apple.com/forums/thread/688518)

[SwiftUI (Xcode 12.2) Picker no longer shows
label.](https://www.hackingwithswift.com/forums/swiftui/swiftui-
xcode-12-2-picker-no-longer-shows-label/4809)

残念ながらApple社製のフレームワーク(とりわけSwiftUI)ではUI部品の標準デザインが変更されると言うことは、ちょくちょく起こっていて、数ヶ月前に書かれたチュートリアルの画面がその通りには再現できなかったりします。

今回の変更がApple社の意図的なものなのかどうか判るほどの記事は見つかりませんでしたので、ある日突然また動作が変えられる可能性もありますが、「SwiftUIではよくあること」くらいに捉えてチュートリアルの画面がそのまま再現されなくてもオッケー、くらいの感覚でいないといけないでしょう。

どうしても「色」や「線幅」のような文言を画面に表示したければ、上記の記事のいくつかにあるように`VStack`や`HStack`などを使って`Picker`以外の場所に記述してやる必要があるでしょう。

* * *

この辺り、Apple社の枠組みの中でプログラミングの勉強をしようと思うと、公式情報だけでなくネット上の情報を頼らないといけなくなることも多いですが、今回のように「コードを記述したのに意図した通り(あるいはテキストに書いてある通り)の結果にならない」ような状況を「エラーになる」と表現すると情報が得にくいと思います。

「エラー」と言う言葉は一般的な広い意味でなく、

  * エラーメッセージとともにビルドが中断するビルド時(コンパイル時)エラー
  * ビルドが成功して実行が始まってからシステムがエラーを検出する実行時エラー

だけに限定して(さらにそれらを区別して)使った方が、Q&Aサイトでは話が通じやすいと思います。


CC BY-SA 4.0
2021-11-10T01:31:48.160
83533
2021-11-10T01:31:48.160
13972
83528
answer