SwiftUI iOS 15键盘工具栏在文本字段中不显示

3

我对SwiftUI还不是很熟悉,正在尝试自学一些东西。但有一个问题困扰了我很长时间……我无法弄清楚为什么我的工具栏不起作用/显示。

以下是示例代码,但按钮不会显示,也没有实际的工具栏。我使用的是iOS 15.2和XCode 13.2 beta。

TextField("placeholder", text: $text)
.toolbar {
   ToolbarItemGroup(placement: .keyboard) {
       HStack {
           Button(action: {
               hideKeyboard()
           }) {
               Text("Done")
           }
       }
   }
}

编辑:

我找出了原因……它就是因为某种原因无法在滚动视图中正常工作。有人知道为什么吗?


我也遇到了这个问题,在此方面的问题/答案非常少。我的问题也是在列表/滚动视图中。 - Meers E. Chahine
@MeersE.Chahine 有一个新答案! - Tamás Sengel
2个回答

4

iOS 15.2 - Xcode 13.2(非beta版本)下的情况。

struct ContentView: View {
    @State var text: String = ""
    
    var body: some View {
        NavigationView {
            VStack {
                Text(text)
                TextField("Enter your name", text: $text)
            }
            .padding()
            .navigationTitle("SwiftUI")
            .toolbar {
//                ToolbarItem(placement: .keyboard) {
//                    Button("Ok") {
//                        print("ok")
//                    }
//                }
                ToolbarItemGroup(placement: .keyboard) {
                    HStack {
                        Button("Press Me") {
                            print("Pressed")
                        }
                        Spacer()
                        Button(action: {
                            print("done")
                        }) { Text("Done") }
                    }
                }
            }
        }
    }
}

请确保您将所有内容放入VStack或类似的容器中。 keyboard


1

Xcode 13.3(发布版本),为了让工具栏显示出来,TextField.toolbar需要放在NavigationView中。

在我的特定情况下,我不想要一个NavigationBar,所以最终我得到了这样的代码来实现它:

var body: some View {
    NavigationView {
        VStack {
            TextField("Enter your name", text: $text)
            // Additional text fields go here, all text fields will get the toolbar.
        }
        .navigationTitle("")
        .navigationBarHidden(true)
        .navigationBarBackButtonHidden(true)
        .toolbar {
            ToolbarItemGroup(placement: .keyboard) {
                Spacer()
                Button("Dismiss") {
                    print("Bismiss keyboard...")
                }
            }
        }
    }
}

只是想知道这些工具栏中的项目不应该放在一个HStack或其他容器中吗? - João Serra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接