如何防止 TextField 在 SwiftUI 列表中消失?

Posted

技术标签:

【中文标题】如何防止 TextField 在 SwiftUI 列表中消失?【英文标题】:How to prevent TextField from disappearing in SwiftUI List? 【发布时间】:2019-12-19 22:14:30 【问题描述】:

有一个讨厌的 SwiftUI 错误,如果将 TextField 放在 List 内的 HStack 中,TextField 就会消失

List 
    ForEach(0...200, id: \.self)  index in
        HStack 
            Text("Text \(index)")
            TextField("Test", text: .constant("TextField \(index)"))
        
    

https://recordit.co/X12uGct7gD

TextField 放在HStack / VStack / ZStack / .overlay() / .background() 中时会发生这种情况。当TextFieldForEach 的唯一孩子时,不会发生这种情况。

我已经提交了一个错误 (FB7500885),但我正在寻找来自社区的想法来解决它。到目前为止,这是我尝试过的:

TextField 上设置显式.frame()TextField 上设置.fixedSized() 使用 UITextField 包裹在 UIViewConvertible 中,有或没有布局约束

还有什么我可以尝试的吗?

【问题讨论】:

您使用哪个 Xcode 版本?用于统计目的。 这发生在 Xcode 11.2 和 11.3 上,无论是在设备上还是在模拟器上。 今天刚打这个。令人抓狂!很高兴找到您的帖子。 【参考方案1】:

试试下面的一个:

  List 
      ForEach(0...200, id: \.self)  index in
          HStack 
              Text("Text \(index)")
            TextField("Test", text: .constant("TextField \(index)")).id(index)
          
      
  

【讨论】:

这行得通!非常感谢。必须使用id() 仍然感觉 SwiftUI 中存在错误,但至少这是一个干净的解决方法。

以上是关于如何防止 TextField 在 SwiftUI 列表中消失?的主要内容,如果未能解决你的问题,请参考以下文章

如何在按钮单击时在 SwiftUI 中为 TextField 设置文本

我如何在SWIFTUI中把textField作为firstResponder,就像Swift一样:textField.becomesFirstResponder。

SwiftUI:如何使 TextField 适合多行内容?

SwiftUI:如何使 TextField 适合多行内容?

SwiftUI - 如何在 TextField 上设置最大数量?

如何检测何时点击 TextField? (MacOS 上的 SwiftUI)