1
2

More than 1 year has passed since last update.

【SwiftUI】iOS15から発生するPickerのバグ

Last updated at Posted at 2022-07-08

はじめに

iOS14では機能していたコードがiOS15で突然挙動がおかしくなるバグに遭遇しました。
解決方法が分かる方はコメントください。

条件

  • iOS15
  • スタイルがwheel

仕様?バグ?

まず前提として、なぜかPickerスタイルがwheelだとframeだけでサイズ変更する事ができません。
clipped()を追加する必要があります。

import SwiftUI

struct ContentView: View {
    @State var index: Int = 0
    var body: some View {
        Picker("", selection: $index) {
            ForEach(0..<5) { i in
                Text("選択肢\(i + 1)")
            }
        }
        .labelsHidden()
        .pickerStyle(.wheel)
        .frame(width: 150, height: 60)
+       .clipped()
    }
}

このようになりました。
スクリーンショット 2022-07-08 11.15.58.png
「ちゃんとサイズ変更できてるじゃん。」と思うかも知れませんが、これには問題があります
Videotogif (1).gif
「えぇ、Pickerじゃない所をスクロールしても反応してる!!」
そうなんです。なぜかPickerがリサイズ出来てないんです。
見た目だけ変わっていて機能は元の範囲まであるっていう落とし穴なんですね
スクリーンショット 2022-07-08 11.42.56.png

解決に向けて試した事

このツイートを発見した時、「おぉ!」と思いました。
clipped()は見た目だけ変更される仕様だったっぽいです。
じゃあ.contentShape(Rectangle())を付けたらなおる?と思い試してみました。

import SwiftUI

struct ContentView: View {
    @State var index: Int = 0
    var body: some View {
        Picker("", selection: $index) {
            ForEach(0..<5) { i in
                Text("選択肢\(i + 1)")
            }
        }
        .labelsHidden()
        .pickerStyle(.wheel)
        .frame(width: 150, height: 60)
        .clipped()
+       .contentShape(Rectangle())
    }
}

結果は、、、解決せず、、、
先ほどと同じ結果となりました。

似たような内容の記事

おわり

解決方法が分かる方はコメントください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2