macOS 上 SwiftUI 列表中的 TextField:编辑效果不佳

问题描述

此问题与使用 Xcode 12.4 (SwiftUI 2) 的 ma​​cOS 应用程序(不是 iOS 或催化剂)的 SwiftUI 有关。 问题是编辑 List 中的 TextField 效果不佳,事实上,它的效果非常差,以至于起初我以为我根本无法编辑它。

这是代码,只是一个简单的例子:

import SwiftUI

struct ContentView: View {
    @State var name1 = "Hans"
    @State var name2 = "E"
    @State var name3 = ""
    
    var body: some View {
        List {
            TextField("Name 1",text: $name1)
            TextField("Name 2",text: $name2)
            TextField("Name 3",text: $name3)
        }
        .textFieldStyle(RoundedBorderTextFieldStyle())
    }
}

TextField with focus

这就是我在尝试编辑字段时所经历的:

  • 对于非空字段,单击现有文本:它起作用了(经过一个很小但很烦人的 0.5 秒延迟)。
  • 对于非空字段,单击外部现有文本:没有任何反应。
  • 对于空白字段(“姓名 3”),单击字段中的任意位置:它有效(经过一小段延迟后)。
  • 在任何字段内的任何位置双击:没有任何反应。

我希望这不是预期的行为。对于仅包含单个字符的字段来说,这尤其成问题,这给用户带来了困难(必须准确点击“E”)。我在这里做错了吗?

我注意到问题 Editable TextField in SwiftUI List,它有点相似,但该问题报告 TextField 根本不起作用。

解决方法

找到了解决方案。

import SwiftUI

struct ContentView: View {
    @State var name1 = "Hans"
    @State var name2 = "E"
    @State var name3 = ""
    
    var body: some View {
        List {}
          .overlay(VStack(spacing: 20){
              TextField("Name 1",text: $name1)
              TextField("Name 2",text: $name2)
              TextField("Name 3",text: $name3)
          })
          .textFieldStyle(RoundedBorderTextFieldStyle())
    }
}