質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%

Q&A

解決済

1回答

2241閲覧

[SwiftUI] List中のPickerが表示されない場合がある

shigeoxa

総合スコア5

0グッド

0クリップ

投稿2020/03/20 10:15

前提・実現したいこと

SegmentedPickerStypeのPickerとTextを横に並べた項目をListで表示したいのですが、画面からあふれる数の項目を配列で用意するとPickerが一部(画面をスクロールした部分)表示されなくなります。
いろいろコードをいじると意図通りに表示されるケースもあり、原因が突き止められません。
どこか間違っているところがありますでしょうか?
何かヒントでも良いので気付いたことがあったら教えてください。
よろしくお願いいたします。

発生している問題・エラーメッセージ

コンパイルエラーなどは発生していません。Pickerの表示がおかしい。

該当のソースコード

SwiftUI

1import SwiftUI 2 3struct Test: Hashable { 4 var data: Int 5 } 6 7func makeData() -> [Test] { 8 var tests = [Test]() 9 for data in 0...20 { 10 tests.append(Test(data: data)) 11// tests.append(Test(data: 0)) 12 } 13 return tests 14} 15 16struct ContentView: View { 17 @State var tests = makeData() 18 @State var sel = 1 19 20 var body: some View { 21 List { 22 ForEach(tests, id: .self) { test in 23 HStack { 24 Picker(selection: self.$sel, label: Text("")) { 25 Text("A").tag(1) 26 Text("B").tag(2) 27 } 28 .pickerStyle(SegmentedPickerStyle()) 29 .frame(height: 100) 30 31 Text("(test.data)").frame(width: 30) 32// Text("(test.data)") 33 } 34 } 35 } 36 } 37}

試したこと

コード中でコメントアウトしているように、データを0固定にしたり、Textの.frameをやめたりすると何故か意図通りに表示されます。
何が引き金なのかわからなくて困っています。

補足情報(FW/ツールのバージョンなど)

Xcode Version 11.3.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

このコードをXcode11.3.1標準添付のシミュレータ(iOS13.3)で実行すると、質問に書かれた通りの問題が発生しますが、iOS13.1のシミュレータをダウンロードして実行すると、問題なく正常に動作しました。
(iOS13.2.2のシミュレータでは問題が発生しました。)

また、Xcode11.4ベータ3(シミュレータはiOS13.4)で実行すると、問題なく正常に動作しました。

どうも、iOS13.2〜iOS13.3の動作に不具合があり、iOS13.4で修正される予定のような気がします。

この問題をiOS13.3でどうやって回避したらいいかは、私にはわかりません。SwiftUIのPickerを使うのではなく、UISegmentedControlをSwiftUIから使う方法でやってみる案はあると思いますが、そもそもPickerのSegmentedPickerStyleは、内部でUISegmentedControlを利用しているようですので、結局は同じことになるかもしれません。

今のコード自体に大きな問題はなさそうに思いますので、問題が発生しなくなる回避パターンをいろいろ試行錯誤して探すしかないように思います。

今SwiftUIを使っている目的が将来のための勉強であれば、今のうちにいろいろ苦労して経験を積んでおくのは良いことだと思いますが、余計な苦労をせずに安定したアプリをリリースしたいなら、SwiftUIを使わずUIKitだけで実装する選択肢も検討すべきと思います。

投稿2020/03/21 02:50

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shigeoxa

2020/03/21 03:43

色々試していただきたいへんありがとうございます。 バグを疑ったときには古いバージョンで試してみる、という方法もあるんですね。 13.1で試したら意図通りに動きました。今後の作業に活用します。 今回は急ぎの案件でもないし、バグの可能性が大きいので、もうすぐ出る13.4を待ってみることにします。 ありがとうございました。
shigeoxa

2020/03/29 03:36

13.4で動作確認したところ意図通りに動作しました。 バグ修正されたようです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問