如果提供了“prompt”,文本字段“title”永远不会在 iOS 上显示?

Saj*_*jon 6 macos textfield ios swift swiftui

设想

我有一个用 SwiftUI 编写的多平台应用程序。我想在 iOS 和 macOS 之间共享尽可能多的代码。

我无法在 iOS 上同时显示 TextField 的title和。prompt当包装在 a 中时Form,两者都会显示在macOS上(当然前提是我们使用TextField初始化程序传递 atitle和 a ),但绝不会在 iOS 上显示。prompt

文件指出

您可以在文本字段上设置明确的提示,以指导用户应提供哪些文本。每个文本字段样式决定文本字段使用提示和标签的位置和时间。例如,macOS 上的表单始终将标签放置在字段的前缘,并使用提示(如果可用)作为字段本身内的占位符文本。在 iOS 上的相同上下文中,文本字段使用提示或标签作为占位符文本,具体取决于初始化程序是否提供提示。

iOS系统

截屏

IOS

代码

struct ContentView: View {
    @State var text1 = ""
    @State var text2 = ""
    @State var text3 = ""
    var body: some View {
        Form {
            TextField("T1", text: $text1, prompt: Text("P1"))
            TextField(text: $text2, prompt: Text("P2")) {
                Text("T2")
            }
            TextField("T3", text: $text3)
            
            Text("iOS: `title` \"T1\" & \"T2\" is never shown, \"P1\", \"P2\" & \"T3\" is shown when fields are empty.")
        }.padding()
    }
}
Run Code Online (Sandbox Code Playgroud)

苹果系统

截屏

苹果系统

代码

代码是一样的....

struct ContentView: View {
    @State var text1 = ""
    @State var text2 = ""
    @State var text3 = ""
    var body: some View {
        Form {
            TextField("T1", text: $text1, prompt: Text("P1"))
            TextField(text: $text2, prompt: Text("P2")) {
                Text("T2")
            }
            TextField("T3", text: $text3)
            
            Text("macOS: `title` \"T1\", \"T2\" & \"T3\" are always shown, \"P1\", \"P2\" are shown when fields are empty.")
        }.padding()
    }
}
Run Code Online (Sandbox Code Playgroud)

问题

文档"Required"显示了一个使用密码字段提示的示例。当 iOS 上仅显示此内容prompt而不显示title “密码”时,这是非常令人困惑的。因为用户不知道她在输入什么......只是她正在输入需要的东西。

问题

如何避免在 iOS 上prompt隐藏title,同时仍然在 macOS 上利用它们?感觉我必须编写自己的 TextField 视图来检查平台是否为 macOS 然后什么也不做,否则如果 iOS 添加手动title视图并将它们包装在 HStack/VStack 中?

我缺少什么?