3
2

【SwiftUI】sheetで表示したViewだとKeyboard上のToolbarが機能しない(iOS17.0)

Last updated at Posted at 2024-01-01

はじめに

iOS17.0でキーボードの上にボタンを表示しようとしても表示されないという問題があるようです。
過去にも同様のバグがあったようですが、iOS16で1度修正されて、iOS17.0で再発したっぽいです。
iOS17.2では直ってました。

再現方法を記録しておきます。

サンプルアプリ

iOS17.0 iOS17.2
Simulator Screen Recording - iPhone 15 - 2024-01-01 at 20.30.30.gif Simulator Screen Recording - iPhone 15 - 2024-01-01 at 20.37.19.gif

実装

import SwiftUI

struct ContentView: View {
    @State var isSheetPresented = false

    var body: some View {
        Button {
            isSheetPresented = true
        } label: {
            Text("sheetを表示")
        }
        .sheet(isPresented: $isSheetPresented) {
            SubView()
        }
    }
}

struct SubView: View {
    @State var text = ""

    @Environment(\.dismiss) private var dismiss

    var body: some View {
        NavigationView {
            TextField("", text: $text)
                .textFieldStyle(.roundedBorder)
                .padding(20)
                .toolbar {
                    ToolbarItemGroup(placement: .topBarTrailing) {
                        Button {
                            dismiss()
                        } label: {
                            Text("閉じる")
                        }
                    }

                    ToolbarItemGroup(placement: .keyboard) {
                        Spacer()
                        Button {
                            print("完了")
                        } label: {
                            Text("完了")
                        }
                    }
                }
        }
    }
}

対策

現時点では不明

おわり

意外と致命的なバグな気がします。
対策を見つけ次第追加します。
UIKitを使えばなんとかなる可能性はありそうです。

Appleにフードバックを送って直してもらいましょう

3
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
3
2