Как я уже писал в других топиках c, это текущий дефект SwiftUI, поэтому пока возможен только обходной путь.
Вот простой способ, который мне подходит (я предпочитаю этот подход, потому что он остается действительно даже после некоторых исправлений / изменений в области):
@State private var text: String = ""
@State private var refresh = false
var body: some View {
VStack {
TextField("Placeholder" + (refresh ? "" : " "), text: $text)
Divider()
Button("Clear") {
self.text = ""
self.refresh.toggle() // << force refresh placeholder explicitly
}
}
}