在 SwiftUI 中,TextEditor 和 TextField 都用于文本输入,但它们有不同的用途和功能:
1、TextEditor
功能:适用于多行文本输入,类似于 UITextView。
外观:支持自动换行,可以显示较多的内容,非常适合用于编写长文本或备注。
用法:与字符串绑定,用于存储和实时更新用户输入。
特点:
多行输入:支持用户输入长文本,可以自动换行。
可调节样式,但不像 TextField 那样有内置的占位符。
适合需要长文本输入的场景,例如撰写评论、文章、或描述内容。
@State private var notes = "Enter your notes here..."
var body: some View {
TextEditor(text: $notes)
.padding()
.border(Color.gray, width: 1)
.frame(height: 200)
}
2、TextField
功能:主要用于单行文本输入,类似于 UITextField。
外观:默认仅支持单行显示,适合较短的输入,例如用户名、密码等。
用法:与字符串绑定,用于实时保存和显示用户输入的短文本。
特点:
单行输入:默认只显示一行文字,超过内容后需要滚动查看。
支持占位符文本,可以指示用户要输入的内容。
常用于表单字段,如名称、电子邮件等短文本输入。
@State private var name = ""
var body: some View {
TextField("Enter your name", text: $name)
.padding()
.border(Color.gray, width: 1)
.textFieldStyle(RoundedBorderTextFieldStyle())
}
在 iOS 16 及以上版本中,TextField 可以通过 axis: .vertical 来支持多行输入,从而缩小了与 TextEditor 的功能差距。
@State private var notes = ""
var body: some View {
TextField("Enter your text", text: $notes, axis: .vertical)
.padding()
.border(Color.gray, width: 1)
}
在 TextField 中,axis 属性控制文本输入的轴方向。axis: .vertical 使 TextField 能够在文本内容超出一行时垂直扩展,而不是水平滚动。此属性让 TextField 能更像 TextEditor,适用于需要多行文本输入的情况,但依然保留了 TextField 的一些特性。
axis 的作用
水平滚动 (axis: .horizontal,默认):文本在一行中输入,内容超出后水平滚动。适合短文本。
垂直扩展 (axis: .vertical):允许 TextField 垂直扩展,适合稍长文本或需要的多行输入内容(尽管 TextField 不如 TextEditor 适合长文本)。