【问题标题】:UI does not refresh when TextEditor changedTextEditor 更改时 UI 不刷新
【发布时间】:2021-06-03 23:39:13
【问题描述】:

我有以下代码。文本更改时,覆盖的内容不会被删除?

ZStack {
   TextEditor(text: $text)

   if text.isEmpty {
       Text("Content")
   }
}

最初会显示覆盖的内容,但如果我继续在 TextEditor 上键入,内容仍会保留在屏幕上。我也检查了 text.count == 0 结果是一样的。

这是屏幕截图 - TextEditor 中的 $text(黄色背景)显然不是空的。 (在 iPadOS/iOS 14.6 和 14.7 beta 上测试)

【问题讨论】:

  • 你能展示一个完整的代码来重现这个问题吗?至于我将您的代码放入 ContentView 的正文中,Text("Content") 隐藏在 TextEditor 后面,无论 text 是否为空。
  • 嗨,很抱歉。代码很长,这里就不贴了。但这是文本隐藏的原因,因为我的代码中有这个: init() { UITextView.appearance().backgroundColor = .clear }
  • 我会倒序看问题。
  • 您的代码快照适用于 Xcode 12.5 / iOS 14.5。请提供完整的可重现示例以及您在哪个环境中对其进行测试。
  • 感谢您的帮助。我在 14.6/14.7 beta 上对其进行了测试,当我在 TextEditor 上输入内容时,内容文本并没有消失。似乎 $text 不会刷新其他视图。我正在使用 iPhone 12 mini 和 iPad mini 进行测试。

标签: swift swiftui


【解决方案1】:

更新的答案显示,当文本变为空(或不为空)时,视图会发生变化:

struct ContentView: View {
@State private var text: String = ""

var body: some View {
    VStack {
        TextEditor(text: $text)
            .overlay(text.isEmpty ? Text("Content isEmpty") : Text(""))
            .frame(width:222, height: 111).border(Color.red)  // <-- testing
        
        text.isEmpty ? Text("text is empty") : Text("text NOT empty")
    }
}
}

【讨论】:

  • 您好,感谢您的帮助。但这并不能解决我遇到的问题,即 $text 中的更改(从文本编辑器添加/删除文本)不会刷新视图。视图中使用 text.isEmpty(或 text.count == 0)的任何内容都不起作用。例如,我使用 text.isEmpty 禁用了一些图标,但它们不起作用。
  • 我已经更新了我的答案。如果这对您不起作用,请告诉我们。
【解决方案2】:

我发现了问题(和解决方案): 我在正文的开头有一个 GeometryReader,一旦我删除它,这个问题就消失了,一切都按预期工作。 这可能是一个 SwiftUI 错误。

【讨论】:

  • 可能是一个错误,但可能不是。向我们展示您正在使用的代码,而不是只展示一点点。
  • 代码很长,工作和不工作的唯一区别是正文中的GeometryReader - 这不应该引起这样的问题。
  • 我已经在我的答案代码中放了一个 GeometryReader 并且一切都运行良好。
猜你喜欢
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2020-02-11
  • 1970-01-01
  • 2021-10-09
相关资源
最近更新 更多